如何在Laravel Eloquent的if语句中使用PHP的Null合并运算符来检查对象是否存在
如何在Laravel Eloquent的if语句中使用PHP的Null合并运算符来检查对象是否存在
如何在 Laravel Eloquents 的 if 语句中使用 PHP 的 Null 合并运算符来检查对象是否存在?目前,它显示以下错误:\n
\nSQLSTATE[42S22]:Column not found: 1054 Unknown column \'posts.categories_id\' in \'where clause\' (SQL: select * from
posts
whereposts
.categories_id
= 2 andposts
.categories_id
is not null andposts
.deleted_at
is null)\n
\n当某个类别与帖子不关联时,我尝试自由删除该类别。只有当它与帖子关联时,它才应显示错误消息。\n
public function destroy(Categories $category) { if ($category->posts ?? 0) { if ($category->posts->count() > 0 ?? 0) { session()->flash('warning', 'Category have related post. Can\'t be deleted!'); return redirect()->back(); } } $category->delete(); session()->flash('success', 'Category deleted successfully!'); return redirect(route('categories.index')); }
\n顺便说一下,我现在有这些关系:\n
App\Post.php Model public function category() { return $this->belongsTo(Categories::class); }
\n
App\Categories.php Model public function posts() { return $this->hasMany(Post::class); }
\n如果我从 if 条件中删除 $category->post
,它就能正常工作。但这将删除包括与帖子关联的所有类型的类别。\n注意:isset($category->post)
也会出错。\n如果可以,请帮帮我。谢谢。
问题的原因是作者在使用Laravel的Eloquent模型查询对象是否存在时,出现了一些错误。作者先尝试将数据库表的列名从"category_id"改为"categories_id",然后在if语句中使用了空合并运算符(Null coalescing ??)来检查对象是否存在。然而,作者意识到自己的模型名应该是"Category"而不是"Categories",这就导致了对"categories_id"的默认查找,而不是"category_id"。最后,作者通过修改模型名和使用空合并运算符(Null coalescing ??)来检查对象是否存在,成功解决了问题。
解决方法如下:
1. 首先,确保数据库表的列名与代码中的列名一致。可以通过使用SQL语句来修改数据库表的列名,例如使用alter table posts change category_id categories_id int(11);
来将"category_id"改为"categories_id"。
2. 确保模型名与数据库表名一致。在这个例子中,模型名应该是"Category"而不是"Categories"。
3. 在if语句中使用空合并运算符(Null coalescing ??)来检查对象是否存在。在这个例子中,可以使用if ($category->posts)
来检查$category对象的"posts"属性是否存在。
最后,作者通过以上方法成功解决了问题。