【问题标题】:How to use IN or Nesting of queires in Eloquent ORM of Laravel 4如何在 Laravel 4 的 Eloquent ORM 中使用 IN 或嵌套 queires
【发布时间】:2014-01-03 01:56:53
【问题描述】:

我正在将我现有的 twitter 克隆玩具项目转换为 Laravel 4。我之前使用过 codeigniter 框架,而 Eloquent ORM 是我接触过的第一个 ORM。 所以我对如何进行一些提前查询感到困惑, 以下查询是获取由users 创建的所有posts,而current_user 正在跟踪这些posts。这个存储过程 sn-p 工作正常。

BEGIN
SELECT 
      tbl_users.id              as user_id, 
      tbl_users.display_name,
      tbl_users.username,
      tbl_posts.id              as post_id, 
      tbl_posts.post_text, 
      tbl_posts.`timestamp`
FROM tbl_posts , tbl_users
WHERE tbl_posts.user_id IN (
    SELECT tbl_followers.destination_user_id FROM tbl_followers
    WHERE  tbl_followers.source_user_id = xSource_user_id  
    )
AND tbl_posts.user_id = tbl_users.id 
ORDER BY tbl_posts.id DESC
LIMIT xLimit;

END

表结构如下:

users : (id)

posts : (id,src_user_id [FK], post_text )

followers : (id , dest_user_id [FK] , src_user_id [FK])

我最好的猜测是:

    Post::where('user_id', 'IN' , Follower::where('from_user_id','=','1'))->toSql();

我在用户模型中添加了以下关系

public function posts()
{
    return $this->hasMany('Post');
}

public function followers()
{
    return $this->hasMany('Follower');
}

【问题讨论】:

    标签: php mysql laravel laravel-4 eloquent


    【解决方案1】:

    你可以这样使用IN:

    Post::whereIn('user_id', yourArray)->get();
    

    但我建议你看一下雄辩手册here,尤其是关系部分

    【讨论】:

    • 谢谢,不过不知道如何处理数组。
    • 你创建了 Post 类吗?
    【解决方案2】:

    您需要使用 lists() 将结果作为数组获取

        Post::whereIn('user_id', Follower::where('from_user_id','=','1')->lists('id'))->toSql();
    

    【讨论】:

    • 谢谢,这太完美了。
    猜你喜欢
    • 2016-10-12
    • 2019-03-15
    • 2012-12-10
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多