Laravel 4 使用with()或JOIN和order by post created_在中创建的post随附用户按自己获取post和按全部获取post

Laravel 4 使用with()或JOIN和order by post created_在中创建的post随附用户按自己获取post和按全部获取post,laravel-4,eloquent,Laravel 4,Eloquent,我在本教程中有一个跟踪系统设置。 它用于获得追随者和追随者,并用于拯救他们。但我想列出我的所有帖子和我关注的人的所有帖子,以及每个帖子的相关用户对象,并按照列中创建的帖子对它们进行排序 与其试着挑选一些代码来展示我所做的尝试,不如说我花了两天时间尝试了join()、leftJoin()、嵌套联接、where()、orWhere()、nested where、with()、joins和where嵌套在with()中的每一种组合,这些组合我都能想到,但我就是想不出来 对于以下内容,我有一个具有us

我在本教程中有一个跟踪系统设置。

它用于获得追随者和追随者,并用于拯救他们。但我想列出我的所有帖子和我关注的人的所有帖子,以及每个帖子的相关用户对象,并按照列中创建的帖子对它们进行排序

与其试着挑选一些代码来展示我所做的尝试,不如说我花了两天时间尝试了join()、leftJoin()、嵌套联接、where()、orWhere()、nested where、with()、joins和where嵌套在with()中的每一种组合,这些组合我都能想到,但我就是想不出来

对于以下内容,我有一个具有user_id和follow_id的透视表。

php模型。(实际上,我的帖子被称为twits,但概念相同)
class Twit extends Eloquent {
    protected $fillable = ['twit', 'user_id'];

    public function user()
    {
        return $this->belongsTo('User');
    }
}
User.php模型
class Twit extends Eloquent {
    protected $fillable = ['twit', 'user_id'];

    public function user()
    {
        return $this->belongsTo('User');
    }
}
我试着让自己明白这一点,但这些雄辩的功能似乎都没有达到我认为它们应该达到的效果。说清楚一点,以下是我需要做的口头说明

获取每个twit及其用户,并按twits.created\u在 仅当user.id=Auth::user()->id 或者user.id在Auth::user()中的位置->如下

帮助将其作为原始查询写出也可以

谢谢你的帮助

更新:删除了我自己的答案,以避免其他人被它弄糊涂,因为它太离谱了,无法100%工作

选定的答案非常有效。以下是@philipbrown选择的答案,为用户添加了急切的加载,并由创建日期的twit订购

在我看来

@foreach($twits作为$twit)
  • 用户->重力)}}“> {{链接到('/twits/'.$twit->user->username'.@'.$twit->user->username)} {{$twit->twit}

  • @endforeach
    我将一步一步地介绍如何解决这个问题。我发现在将原始查询转换为ORM方法之前,更容易理解原始查询,因此我将按照我的思路编写,而不仅仅是给出答案

    编写原始查询 所以首先我只需要得到所有的
    twits
    (我猜是
    twits
    ?):

    接下来,我将通过仅从当前用户中选择(以用户_id 1为例)来改进此功能:

    接下来,我们可以使用SQL子选择来查找当前用户跟随的所有用户:

    SELECT * FROM twits WHERE user_id IN (SELECT follow_id FROM user_follows WHERE user_id = 1) OR user_id = 1
    
    现在,如果您在数据库上运行它并更改
    用户id
    ,您应该会得到您所期望的
    twits

    转化为雄辩的 现在我们已经对原始查询进行了排序,我们可以将其转换为使用Eloquent,这样您将返回一个Eloquent
    集合

    同样,首先只需获取所有
    twits

    $twits = Twit::all();
    
    接下来我们需要使用
    方法,其中
    方法:

    $twits = Twit::whereIn('user_id', array(2, 3, 4))->get();
    
    但是我们需要传递一个闭包,而不是传递一个用户ID数组,这样我们就可以进行子选择:

    $twitss = Twit::whereIn('user_id', function($query)
    {
      $query->select('follow_id')
            ->from('user_follows')
            ->where('user_id', '1');
    })->get();
    
    最后,我们可以传入当前用户以包括当前用户的帖子:

    $twits = Twit::whereIn('user_id', function($query)
    {
      $query->select('follow_id')
            ->from('user_follows')
            ->where('user_id', '1');
    })->orWhere('user_id', '1')->get();
    
    现在,应该会从当前用户和当前用户跟随的所有用户返回一个
    twits
    集合

    最后,您只需将
    1
    替换为
    Auth::user()->id
    即可找到当前用户


    希望这能有所帮助!:)

    我将一步一步地介绍如何解决这个问题。我发现在将原始查询转换为ORM方法之前,更容易理解原始查询,因此我将在完成它的过程中写出它,而不仅仅是给你答案

    编写原始查询 所以首先我只需要得到所有的
    twits
    (我猜是
    twits
    ?):

    接下来,我将通过仅从当前用户中选择(以用户_id 1为例)来改进此功能:

    接下来,我们可以使用SQL子选择来查找当前用户跟随的所有用户:

    SELECT * FROM twits WHERE user_id IN (SELECT follow_id FROM user_follows WHERE user_id = 1) OR user_id = 1
    
    现在,如果您在数据库上运行它并更改
    用户id
    ,您应该会得到您所期望的
    twits

    转化为雄辩的 现在我们已经对原始查询进行了排序,我们可以将其转换为使用Eloquent,这样您将返回一个Eloquent
    集合

    同样,首先只需获取所有
    twits

    $twits = Twit::all();
    
    接下来我们需要使用
    方法,其中
    方法:

    $twits = Twit::whereIn('user_id', array(2, 3, 4))->get();
    
    但是我们需要传递一个闭包,而不是传递一个用户ID数组,这样我们就可以进行子选择:

    $twitss = Twit::whereIn('user_id', function($query)
    {
      $query->select('follow_id')
            ->from('user_follows')
            ->where('user_id', '1');
    })->get();
    
    最后,我们可以传入当前用户以包括当前用户的帖子:

    $twits = Twit::whereIn('user_id', function($query)
    {
      $query->select('follow_id')
            ->from('user_follows')
            ->where('user_id', '1');
    })->orWhere('user_id', '1')->get();
    
    现在,应该会从当前用户和当前用户跟随的所有用户返回一个
    twits
    集合

    最后,您只需将
    1
    替换为
    Auth::user()->id
    即可找到当前用户


    希望这能有所帮助!:)

    是的!谢谢你的演练。我曾经做过类似的事情,但没有用raw或elount正确地进行子查询。它现在工作得很好:-)。是的!谢谢你的演练。我曾经做过类似的事情,但没有用raw或elount正确地进行子查询。它正在工作完美的现在:-)。