php - 如何使用 Null 合并?使用 Laravel Eloquents 的 if 语句中的 php 运算符来检查对象是否存在
问题描述
如何使用 Null 合并?使用 Laravel Eloquents 的 if 语句中的 PHP 运算符来检查对象是否存在?目前,它显示此错误:
SQLSTATE [42S22]:未找到列:1054 'where 子句'中的未知列'posts.categories_id'(SQL:select * from
posts
whereposts
.categories_id
= 2 andposts
.categories_id
is not null andposts
.deleted_at
is 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)
也给出了错误。
如果可以,请你帮助我。谢谢。
解决方案
我想我在这里找到了解决方案。我只是通过这里的 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'));
}
这种方法现在工作正常。
非常感谢你的帮助
推荐阅读
- javascript - Javascript 的未知浏览器问题
- python - python:数组指定范围内的最小值
- java - 我们必须在 c 中删除链表中的节点时释放内存,但在 java 中我们不必这样做,为什么?
- javascript - 如何从创建方法以外的其他方法访问 Leaflet Map Markers 的 markerOptions?
- python - 循环遍历元组列表并删除它们
- python - 如何通过 Git Bash 和 Python 运行工作目录中的文件
- python - 如何使用 python 从网站中提取数据以获取数据表?
- javascript - Javascript Date.UTC() 返回前一天
- python - 读取行直到某个字符串并将其删除
- sql - 使用 CTE 向树数据添加排序覆盖