首页 > 解决方案 > 如何使用 Null 合并?使用 Laravel Eloquents 的 if 语句中的 php 运算符来检查对象是否存在

问题描述

如何使用 Null 合并?使用 Laravel Eloquents 的 if 语句中的 PHP 运算符来检查对象是否存在?目前,它显示此错误:

SQLSTATE [42S22]:未找到列:1054 'where 子句'中的未知列'posts.categories_id'(SQL:select * from postswhere posts. categories_id= 2 and posts. categories_idis not null and posts. deleted_atis null)

当该类别与帖子无关时,我尝试自由删除该类别。如果它与帖子相关联,那么它应该显示错误消息

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'));

}

顺便说一句,我现在有这些关系:

    App\Post.php Model 
    public function category()
    {
        return $this->belongsTo(Categories::class);
    }
    App\Categories.php Model 
    public function posts()
    {
        return $this->hasMany(Post::class);
    }

如果我$category->post从我的 if 条件中删除它就可以工作。但随后它会删除所有类型的类别,包括与帖子相关的类别。注意:isset($category->post)也给出了错误。

如果可以,请你帮助我。谢谢。

标签: phplaraveleloquenteloquent-relationship

解决方案


我想我在这里找到了解决方案。我只是通过这里的 SQL 列重命名语句将列名 category_id 重命名为 categories_id:

alter table posts change category_id categories_id int(11);

我现在可以访问$category->posts我的 if 语句。我认为我的模型名称应该是类别而不是类别。这就是问题所在,所以我得到了 category_id 而不是 category_id 的默认查找。顺便说一句,它现在在这里工作得很好。

   public function destroy(Categories $category)
   {
       if ($category->posts) {
           if ($category->posts->count() > 0) {
               session()->flash('warning', 'Category have related post. Can\'t be deleted!');
               return redirect()->back();
           }
       }
       $category->delete();
       session()->flash('warning', 'Category deleted successfully!');
       return redirect(route('categories.index'));
   }

这种方法现在工作正常。

非常感谢你的帮助


推荐阅读