laravel ColumnDefinition class 中的方法在哪里实现?
Where are the methods in laravel ColumnDefinition class implemented?
要在 laravel 中编写迁移,我们有不同的方法将它们应用到我们的 $table
列。例如,其中之一是 nullable()
,它使该列可以为空。
我想知道,像nullable()
这样的函数是在哪里定义的。我在 laravel 中看不到 public function nullable()
之类的内容。这必须在这些 classes 之一中,但我找不到它:
1) vendor\laravel\framework\src\Illuminate\Database\Schema\ColumnDefinition
2) vendor\laravel\framework\src\Illuminate\Support\Fluent
3) vendor\laravel\framework\src\Illuminate\Database\Schema\Blueprint
或任何其他 class 从这些或其中之一中使用的任何其他特征扩展。
这些函数是在哪里定义的?
nullable
等修饰符函数因数据库驱动程序(或 laravel 中声明的语法)而异
你可以在vendor\laravel\framework\src\Illuminate\Database\Schema\Grammars\
中找到你想要的
对于 mysql,检查 Illuminate\Database\Schema\Grammars\MySqlGrammar
可空方法本身不存在。如果你看一下 Blueprint
class,addColumn
方法 returns ColumnDefinition
.
的一个实例
而 ColumnDefinition
是一个空的 class,它只是扩展了包含以下 __call
方法的 Fluent
class:
/**
* 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
属性保存到[=23] =].这也转化为:
$this->attributes['nullable'] = true;
然后在 MySqlGrammar
class 中检查该列是否可为空:
/**
* 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
要在 laravel 中编写迁移,我们有不同的方法将它们应用到我们的 $table
列。例如,其中之一是 nullable()
,它使该列可以为空。
我想知道,像nullable()
这样的函数是在哪里定义的。我在 laravel 中看不到 public function nullable()
之类的内容。这必须在这些 classes 之一中,但我找不到它:
1) vendor\laravel\framework\src\Illuminate\Database\Schema\ColumnDefinition
2) vendor\laravel\framework\src\Illuminate\Support\Fluent
3) vendor\laravel\framework\src\Illuminate\Database\Schema\Blueprint
或任何其他 class 从这些或其中之一中使用的任何其他特征扩展。
这些函数是在哪里定义的?
nullable
等修饰符函数因数据库驱动程序(或 laravel 中声明的语法)而异
你可以在vendor\laravel\framework\src\Illuminate\Database\Schema\Grammars\
对于 mysql,检查 Illuminate\Database\Schema\Grammars\MySqlGrammar
可空方法本身不存在。如果你看一下 Blueprint
class,addColumn
方法 returns ColumnDefinition
.
而 ColumnDefinition
是一个空的 class,它只是扩展了包含以下 __call
方法的 Fluent
class:
/**
* 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
属性保存到[=23] =].这也转化为:
$this->attributes['nullable'] = true;
然后在 MySqlGrammar
class 中检查该列是否可为空:
/**
* 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