在 Eloquent ORM 中左加入 Where
Posted
技术标签:
【中文标题】在 Eloquent ORM 中左加入 Where【英文标题】:Left join with Where in Eloquent ORM 【发布时间】:2014-01-03 19:15:23 【问题描述】:我正在尝试使用 Eloquent ORM 编写此 SQL 查询,但仍然没有成功:
SELECT *
FROM article
LEFT JOIN article_category
ON article.category_id = article_category.id
WHERE article_category.name_url = 'html'
LIMIT 10`
这是我目前想出的(我尝试只用一个查询来编写它,就像上面一样):
ArticleCategory::where('name_url', '=', 'html')->with('articles')->get();
但它显示错误:
Column not found:
1054 Unknown column 'article.article_category_id' in 'where clause'
(SQL: select * from `article` where `article`.`article_category_id` in (1))
我的模型:
class Article extends Eloquent
protected $table = 'article';
public function categories()
return $this->belongsTo('ArticleCategory', 'category_id');
class ArticleCategory extends Eloquent
protected $table = 'article_category';
public function articles()
return $this->hasMany('Article');
【问题讨论】:
【参考方案1】:您可以更改您的关系函数以使用正确的 ID。
public function articles()
return $this->hasMany('Article', 'category_id');
【讨论】:
【参考方案2】:它期望列 category_id 实际上被命名为 article_category_id。它期望这是因为它引用了表 artice_catigory,所以 article_category_id 是有意义的。
如果可能,只需将表格 article 中的列重命名为 article_category_id,一切都会好起来的。
【讨论】:
【参考方案3】:您可以使用 eloquent orm 使用左连接,如下所示
Article::leftJoin('article_category', 'article.category_id', '=', 'article_category.id')
->select(['*'])->where('article_category.name_url','html')->take(10)->get();
【讨论】:
以上是关于在 Eloquent ORM 中左加入 Where的主要内容,如果未能解决你的问题,请参考以下文章
丰富 Eloquent ORM 的 where 查询条件的解析场景