gpt4 book ai didi

php - laravel ColumnDefinition 类中的方法在哪里实现?

转载 作者:可可西里 更新时间:2023-11-01 00:18:17 25 4
gpt4 key购买 nike

要在 Laravel 中编写迁移,我们有不同的方法将它们应用到我们的 $table 列。例如,其中之一是 nullable(),它使该列可为空。

我想知道,像nullable() 这样的函数是在哪里定义的。我在 laravel 中看不到任何东西,例如 public function nullable() 。这必须在这些类之一中,但我找不到它:

1) 供应商\laravel\framework\src\Illuminate\Database\Schema\ColumnDefinition

2) 供应商\laravel\framework\src\Illuminate\Support\Fluent

3) 供应商\laravel\framework\src\Illuminate\Database\Schema\Blueprint

或从这些或其中一个中使用的任何其他特征扩展的任何其他类。

这些函数是在哪里定义的?

最佳答案

可为空的方法本身不存在。如果您查看 Blueprint 类,addColumn 方法会返回 ColumnDefinition 的实例。

ColumnDefinition 是一个空类,它简单地扩展了包含以下 __call 方法的 Fluent 类:

/**
* Handle dynamic calls to the fluent instance to set attributes.
*
* @param string $method
* @param array $parameters
* @return $this
*/
public function __call($method, $parameters)
{
$this->attributes[$method] = count($parameters) > 0 ? $parameters[0] : true;

return $this;
}

因此,当您执行 $table->string('name')->nullable(); 时,它会进入 __call,因为 nullable 方法不存在,只是将 nullable 属性保存为 true。这也转化为:

$this->attributes['nullable'] = true;

然后在 MySqlGrammar 类中,它检查该列是否可为空:

/**
* Get the SQL for a nullable column modifier.
*
* @param \Illuminate\Database\Schema\Blueprint $blueprint
* @param \Illuminate\Support\Fluent $column
* @return string|null
*/
protected function modifyNullable(Blueprint $blueprint, Fluent $column)
{
if (is_null($column->virtualAs) && is_null($column->storedAs)) {
return $column->nullable ? ' null' : ' not null';
}
}

有关__call的更多信息:https://www.php.net/manual/en/language.oop5.overloading.php#object.call

关于php - laravel ColumnDefinition 类中的方法在哪里实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57146628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com