【问题标题】:Laravel Eloquent with and findLaravel Eloquent with and find
【发布时间】:2013-05-27 16:07:39
【问题描述】:

为什么这不起作用?

Article::with('category')->find($ids)

我遇到了一个数组到字符串转换异常。

但是如果我像这样将查询分成两部分:

$articles = Article::with('category')

$articles = $articles->find($ids)

我没有得到任何异常,结果是对的。

【问题讨论】:

  • 能否粘贴“数组到字符串转换”异常的堆栈跟踪?据我所知,您第一次发布的内容应该有效。 编辑: 确保 $ids 是单个 ID,而不是 ID 数组。如果您想查找 ID 在数组中的文章,请使用 where_in('id', $ids)->get()

标签: laravel eloquent


【解决方案1】:

只是为了后代......您可以这样做的其他方法是:

Article::with('category')->whereIn('id', $ids)->get();

这应该更快,因为它将查询留给数据库管理器

【讨论】:

  • 三个月前已经发布的亚当提交的另一个答案完全相同。 “with”和“whereIn”调用的顺序没有任何区别。两者都是同样好的答案。
  • 谢谢 Ord,我确实想知道为什么我的不被接受。现在在 L5 中更容易。文章::with('category')->find($ids);
  • 我宁愿使用->first(); 而不是->get();。第一个将返回预期的文章,而第二个将返回一个集合。
  • 如果你看到这个问题,他想获取 id 属于$ids$articles。他不想得到一篇文章
  • 我收到一个错误Allowed memory size of 268435456 bytes exhausted
【解决方案2】:

试试:

Article::with('category')->get()->find($ids);

我相信你需要先获取文章才能调用 find()。

警告:这会从数据库中检索每篇文章并将它们全部加载到内存中,然后从所有数据中仅选择一篇并将其返回。这可能不是您想要处理此问题的方式。

【讨论】:

  • 不,这不起作用。我没有得到任何异常,但雄辩只使用一个id。你的解决方案的结果是空的。还有其他想法吗?
  • var_dump(Article::with('category')->first()) 有什么效果吗?
  • 是的。这工作正常,而且工作正常:Article::with('category')->find(5)。但是,如果我将 find 与数组一起使用,我会得到一个数组到字符串异常。我很困惑。
  • 为此,您需要在“app/models/Article.php”中定义函数“category()”。在这里寻求帮助laravel.com/docs/4.2/eloquent#relationships
  • 不,不要那样做!这将从数据库中检索每篇文章(!),然后只返回与“$ids”匹配的文章(顺便说一下,应该称为“$id”,因为它必须是单个值,而不是数组! )。请参阅已接受的答案。
【解决方案3】:

这将根据 Laravel 4 中的 ID 数组为您提供结果

Article::whereIn('id', $ids)->with('category')->get();

【讨论】:

    【解决方案4】:

    创建对象并通过关系设置他的属性

    例如,控制器或服务中的代码

    $article = new Article;
    $article = $article->find($id);
    
    $result->article = $article;
    $result->article->category = $article->category;
    
    return response()->json($result);
    

    模型中的代码

    public function category() {
        return $this->hasOne('App\Category');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      相关资源
      最近更新 更多