如何在Laravel Eloquent的if语句中使用PHP的Null合并运算符来检查对象是否存在

8 浏览
0 Comments

如何在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 where posts.categories_id = 2 and posts.categories_id is not null and posts.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如果可以,请帮帮我。谢谢。

0
0 Comments

问题的原因是作者在使用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"属性是否存在。

最后,作者通过以上方法成功解决了问题。

0