Laravel 5.5三表加入

时间:2017-11-14 12:05:50

标签: php laravel laravel-5

编辑:我正在使用API​​路由,所以我没有视图等等

我有一个像这样的数据库

User:
   id
   name

card:
   id
   card_number
   user_id


swipe:
   id
   time
   card_number

关系如下:用户有一张卡一张卡有很多刷卡

连接就是这样

user.id = card.user_id
card.card_number = swipe.card_number

在拉威尔,我有3个型号。

user
card
swipe

用户模型

class user extends Model
{

    public function card()
    {
        return $this->hasOne('App\card','user_id','id');
    }

}
如果我做了

,在控制器中

$model = user::with('card')->get();

我按预期获得与用户数据连接的卡数据。

class card extends Model
{


    public function person()
    {
       return $this->belongsTo('App\user');
    }

    public function swipe(){
        return $this->hasMany('App\swipe','card_number','card_number');
    }
}

如果我现在这样做

$ model = user :: with('card.swipe') - > get();

我希望通过他们的卡返回所有用户,并刷卡与该卡相关联。

但我得到的是

500内部服务器错误

我在这里做错了什么?

4 个答案:

答案 0 :(得分:0)

例如,你可以这样使用。

$shares = DB::table('shares')
    ->join('users', 'users.id', '=', 'shares.user_id')
    ->join('follows', 'follows.user_id', '=', 'users.id')
    ->where('follows.follower_id', '=', 3)
    ->get();

答案 1 :(得分:0)

你不能这样使用,

user::with('card.swipe')->get();

使用有很多通过

https://laravel.com/docs/5.5/eloquent-relationships#has-many-through

user - countries (in docs)
card - users (in docs)
swipe - posts (in docs)

$country->posts;
$user->swipe;

答案 2 :(得分:0)

我不知道这是否是正确的解决方案,但您可以尝试:

public function swipe(){
    return $this->hasMany('App\swipe')->where('card_number','card_number');
}

答案 3 :(得分:0)

您应该能够在控制器中提取数据,如下所示:

return user::with(['card' => function($query) {
   $query->with('swipe');
}])->get(); 

确保您的滑动模型"属于(' App \ card')"。