在Laravel中选择数据透视表

时间:2014-12-15 20:33:14

标签: php sql laravel laravel-4

我为表userscourses创建了一个数据透视表。

用户可以有很多课程,课程可以有很多课程。所以,

Course.php

 public function user(){
       return $this->hasMany('User');
    }

并在User.php

public function courses(){
    return $this->hasMany('Course');
}

当我尝试调用以下查询时,会出现错误。

$user = User::where('id', Auth::user()->id)->first();
$courses = $user->courses->get();


错误:

SQLSTATE [42S22]: Column not found: 1054 Champ 'courses.user_id unknown in where clause (SQL: select * from `` Where courses` courses`.`user_id` = 3)

可能是什么问题?我做得对吗?

2 个答案:

答案 0 :(得分:1)

您必须返回这段关系。此外,您需要使用belongsToMany()来实现多对多关系。

public function user(){
    return $this->belongsToMany('User');
}

public function courses(){
    return $this->belongsToMany('Course');
}

⇒ Laravel Docs

答案 1 :(得分:0)

你应该使用$user = User::with('courses')->where('id', Auth::id())->first();来代替你的代码。

然后你可以使用$user->courses作为数组来访问cources。

请注意,Auth::id()相当于Auth::user()->id

编辑:你应该在课程中使用以下功能:

public function user()
{
   return ($this->belongsToMany('User'));
}