Laravel errors太误导ether了debug模式,有什么方法可以更清楚的errors吗?
Laravel errors is too misleading ether with debug mode, is there any ways to have more clear errors?
我在迁移中有一个拼写错误:
Schema::create('business_category',function(Blueprint $table){
$table->integer('business_id')->unsinged();
$table->integer('category_id')->unsinged();
});
Schema::create('business_category',function(Blueprint $table){
$table->foreign('business_id')->references('id')->on('business');
$table->foreign('category_id')->references('id')->on('category');
});
我运行"php artisan migrate"
已显示此错误:
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1005 Can't create table
'brandecide.#sql-42 4_aa' (errno: 150) (SQL: alter table
business_category
add constraint bus
iness_category_business_id_foreign foreign key (business_id
)
references business
(id
))
此错误由以下原因引起:
$table->integer('business_id')->**unsinged**();
我应该将其更改为
$table->integer('business_id')->**unsigned**();
修复它。
我应该如何从错误中理解这一点?
您的 business_category
table 中可能已经有一些条目。当 运行 迁移时,您正在尝试添加一个引用另一个 table 的列。由于您没有定义任何默认值,MySQL 尝试将该值默认为 null
,但这与另一个 table 中的任何内容都不对应。当有外键时,该列 中的值必须 对应于另一个 table.
中的值
所以要解决它,您可以创建一个 ->default(1)
,假设 ID 1
存在于您的 business
-table.
How should I understand this from the error?
很遗憾,你不能。我同意该错误具有误导性。问题是 unique()
不是真正的方法。 (如果是这样你会得到一个方法未定义的异常)
相反,对 unique()
的调用最终被 Illuminate\Support\Fluent
捕获
public function __call($method, $parameters)
{
$this->attributes[$method] = count($parameters) > 0 ? $parameters[0] : true;
return $this;
}
然后在不进行任何检查的情况下添加到 $this->attributes
。这不会导致错误,只会导致永远不会使用的属性 (unsinged
) 和导致约束失败的缺失 unsigned
。
如果需要,可以在 github 上 create an issue(类型 "proposal")。也许有人知道如何防止这种情况发生。 (例如,公认方法的白名单)
我在迁移中有一个拼写错误:
Schema::create('business_category',function(Blueprint $table){
$table->integer('business_id')->unsinged();
$table->integer('category_id')->unsinged();
});
Schema::create('business_category',function(Blueprint $table){
$table->foreign('business_id')->references('id')->on('business');
$table->foreign('category_id')->references('id')->on('category');
});
我运行"php artisan migrate" 已显示此错误:
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1005 Can't create table 'brandecide.#sql-42 4_aa' (errno: 150) (SQL: alter tablebusiness_category
add constraint bus
iness_category_business_id_foreign foreign key (business_id
) referencesbusiness
(id
))
此错误由以下原因引起:
$table->integer('business_id')->**unsinged**();
我应该将其更改为
$table->integer('business_id')->**unsigned**();
修复它。 我应该如何从错误中理解这一点?
您的 business_category
table 中可能已经有一些条目。当 运行 迁移时,您正在尝试添加一个引用另一个 table 的列。由于您没有定义任何默认值,MySQL 尝试将该值默认为 null
,但这与另一个 table 中的任何内容都不对应。当有外键时,该列 中的值必须 对应于另一个 table.
所以要解决它,您可以创建一个 ->default(1)
,假设 ID 1
存在于您的 business
-table.
How should I understand this from the error?
很遗憾,你不能。我同意该错误具有误导性。问题是 unique()
不是真正的方法。 (如果是这样你会得到一个方法未定义的异常)
相反,对 unique()
的调用最终被 Illuminate\Support\Fluent
public function __call($method, $parameters)
{
$this->attributes[$method] = count($parameters) > 0 ? $parameters[0] : true;
return $this;
}
然后在不进行任何检查的情况下添加到 $this->attributes
。这不会导致错误,只会导致永远不会使用的属性 (unsinged
) 和导致约束失败的缺失 unsigned
。
如果需要,可以在 github 上 create an issue(类型 "proposal")。也许有人知道如何防止这种情况发生。 (例如,公认方法的白名单)