首页 > 解决方案 > 将 DB Join 查询转换为 Eloquent 关系

问题描述

我的用户模型中有以下功能:

public function getInterests()
{

    return $this->hasMany('App\Interest')->get();

}

public function getGifts()
{

    return DB::table('gifts')
        ->join('sent_gifts', function ($join) {
            $join->on('gifts.id', '=', 'sent_gifts.gift_id')
                ->where('user_2', $this->id);
        })
        ->join('users', function ($join) {
            $join->on('users.id', '=', 'sent_gifts.user_1');
        })
        ->get();

}

我不明白如何创建复杂的 Eloquent 关系,但我想使用 Eloquent ORM 的所有优点,例如访问器和日期上的碳实例。

我将如何将我的getGifts()功能转换为雄辩的关系?

PS:我已经创建了App\UserApp\GiftApp\SentGift模型。

标签: phplaraveleloquent

解决方案


你可以这样使用。这是我的关系。

用户模型

class User extends Eloquent { 
   protected $table = 'users'; 
   public function posts() { 
     return $this->hasMany('App\Post'); 
   } 
}

后模型

class Post extends Eloquent { 
  protected $table = 'posts'; 
  public function comments() { 
    return $this->hasMany('App\Comment'); 
  } 
 }

并查询使用如下..

User::with('posts.comments')->get();

推荐阅读