Laravel / Lumen模型查询::和where:如何做到这一点?

时间:2017-11-07 11:29:50

标签: php laravel-5 eloquent lumen laravel-5.5

嘿,在Laravel / Lumen我有一个模型"文章"。以下作品:

    $article = Article::with('ArticleTranslations',
       'ArticleTranslations.Terms','Category','Category.CategoryTranslations')
        ->where('tbl_article.a_id',$id)
        ->first();

然而,以下因异常而失败:

    $article = Article::with('ArticleTranslations',
        'ArticleTranslations.Terms','Category','Category.CategoryTranslations')
        ->where('tbl_article.a_id',$id)
        ->where('tbl_articleTranslation.at_languageId',$language->getKey())
        ->where('tbl_categoryTranslation.ct_languageId',$language->getKey())
        ->first();

......虽然例外是这样的:

  

(3/3)QueryException SQLSTATE [42S22]:找不到列:1054未知   专栏' tbl_articleTranslation.at_languageId'在' where子句' (SQL:   从tbl_article中选择* tbl_articlea_id = 1和   tbl_articleTranslationat_languageId = 2和   tbl_categoryTranslationct_languageId = 2限制1)in   Connection-> runQueryCallback的Connection.php(第664行)('选择*   来自tbl_article tbl_articlea_id =?和   tbl_articleTranslationat_languageId =?和   tbl_categoryTranslationct_languageId =?限制1',数组(' 1',2,   2),对象(Closure))在Connection.php(第624行)

但我确信tbl_articleTranslation.at_languageId存在。哪里可能出错,是否有更正确的方法呢?

1 个答案:

答案 0 :(得分:1)

如果要过滤加载文章的相关记录,则需要对关系应用约束。

要加载所有文章但仅包含给定语言的翻译,请执行以下操作:

$article = Article::with(
  'ArticleTranslations' => function($query) use ($language) {
    $query->where('at_languageId', $language->getKey());
  },       
  'ArticleTranslations.Terms',
  'Category',
  'Category.CategoryTranslations' => function($query) use ($language) {
    $query->where('ct_languageId', $language->getKey());
  }
)->findOrFail(id);