【问题标题】:Laravel/Lumen Model query with:: and where: How to do this right?Laravel/Lumen 模型查询与:: 和 where: 如何正确执行此操作?
【发布时间】:2017-11-07 11:29:49
【问题描述】:

嘿,在 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 未知 “where 子句”中的“tbl_articleTranslation.at_languageId”列(SQL: 从tbl_article 中选择 * 其中tbl_article.a_id = 1 和 tbl_articleTranslation.at_languageId = 2 和 tbl_categoryTranslation.ct_languageId = 2 限制 1) 在 Connection.php(第 664 行)在 Connection->runQueryCallback('select * 来自tbl_article tbl_article.a_id = ?和 tbl_articleTranslation.at_languageId = ?和 tbl_categoryTranslation.ct_languageId = ?限制1',数组('1',2, 2)、Connection.php中的object(Closure))(第624行)

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

【问题讨论】:

  • “where”属性仅适用于 tbl_article 表,并且该字段不存在其中。您使用“with()”加载的翻译、类别和其他相关模型在单独的查询中加载,并且在未应用语句的地方加载。您试图从数据库中加载什么?
  • 好吧,有道理,到目前为止可以理解。一篇文章有​​一个具有语言的文章翻译。我只想用所需的语言(id 为 $language->getKey())加载文章。我怎样才能做到最好?

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


【解决方案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);

【讨论】:

    猜你喜欢
    • 2017-09-27
    • 1970-01-01
    • 2020-01-22
    • 2020-05-30
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多