Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Laravel/Elount订购相关模型_Php_Laravel_Orm - Fatal编程技术网

Php 使用Laravel/Elount订购相关模型

Php 使用Laravel/Elount订购相关模型,php,laravel,orm,Php,Laravel,Orm,是否可以对对象的相关模型使用orderBy?也就是说,假设我有一个博客帖子模型,其中包含大量的内容;我可以用它来取收藏品 $posts = BlogPost::all(); 然后浏览每篇文章,并显示每篇文章最后编辑的日期 foreach($posts as $post) { foreach($post->comments as $comment) { echo $comment->edited_date,"\n"; } } 有没有办法设置返

是否可以对对象的相关模型使用orderBy?也就是说,假设我有一个博客帖子模型,其中包含大量的内容;我可以用它来取收藏品

$posts = BlogPost::all();
然后浏览每篇文章,并显示每篇文章最后编辑的日期

foreach($posts as $post)
{
    foreach($post->comments as $comment)
    {
        echo $comment->edited_date,"\n";
    }
}
有没有办法设置返回注释的顺序?

是:

$posts = BlogPost::with('comments')
           ->orderBy('comments_table_name.column_name')
           ->get();
您还可以在关系中设置:

public comments()
{
    $this->hasMany("Comments")->orderBy('comments.column_name');
}

从关系返回的对象是一个支持查询生成器功能的雄辩实例,因此可以对其调用查询生成器方法

foreach$posts作为$post{ foreach$post->comments->orderBy'edited_date'->获取为$comment{ echo$comment->编辑的\u日期,\n; } } 此外,请记住,当您对所有这样的帖子进行foreach时,Laravel必须运行一个查询来为每个迭代中的帖子选择注释,因此建议使用您在中看到的注释

您还可以为有序注释创建一个独立函数,如中所示

公共职能评论{ return$this->hasMany'Comment'->orderBy'comments.edited_date'; }
然后您可以像在原始代码中那样循环它们。

这是正确的方法:

BlogPost::with(['comments' => function ($q) {
  $q->orderBy('whatever');
}])->get();

创建联接并仅选择要订购的列:

$post = BlogPost::join('comments', function($j) {
        $j->on('posts.id', '=', 'comments.post_id');
        $j->select('comment_date_or_other_col');
     })
     ->orderBy('comment_date_or_other_col', 'DESC')->first();

啊,我错过了get——而且,这不应该是对comments方法的调用吗?如果我尝试使用magic属性,我会调用undefined方法illumb\Database\Eloquent\Collection::orderBy+1 for with-我还没有看到那个pne。然而,orderBy似乎应用于第一个查询select*from blog_posts,而不是第二个查询。应用order by是否有不同的语法和/或是否需要以某种方式设置关系?在这里引用BlogPost::with code,而不是直接向relations添加内容这是错误的,您不能像这样引用相关表,因为在应用orderby的主查询中没有使用它。这确实是正确的方法!如果您需要灵活地设置每个查询的顺序,那么这是唯一一个不会对每个项目进行新查询的解决方案。这绝对是可以接受的答案。