我一直在尝试创建一个简单的用户管理系统,但在查询关系时不断遇到障碍。例如,我有用户和角色,每当我尝试对所有用户及其角色进行查询时,我都会收到错误消息。标题中的那个只是我遇到的最新版本。
我的用户和角色模型如下所示:
@Entity
@Table(name = "my_custom_table_name")
public class SomeModel extends Model {
...
}
class Role extends Model
{
public function users()
{
$this->belongsToMany('\App\User', 'fk_role_user', 'role_id', 'user_id');
}
}
我的迁移表中两者之间的多对多关系如下所示:
class User extends Model
{
public function roles()
{
$this->belongsToMany('\App\Role', 'fk_user_role', 'user_id', 'role_id');
}
}
然后我尝试在控制器中获取他们关系的所有记录:
public function up()
{
Schema::create('role_user', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned()->nullable(); //fk => users
$table->integer('role_id')->unsigned()->nullable(); //fk => roles
$table->foreign('fk_user_role')->references('id')->on('users')->onDelete('cascade');
$table->foreign('fk_role_user')->references('id')->on('roles')->onDelete('cascade');
});
}
所以我需要另一双眼睛来告诉我这里缺少什么?
答案 0 :(得分:112)
您在定义关系的方法中缺少 return 语句。他们需要返回关系定义。
替换
public function roles()
{
$this->belongsToMany('\App\Role', 'fk_user_role', 'user_id', 'role_id');
}
使用
public function roles()
{
return $this->belongsToMany('\App\Role', 'role_user', 'user_id', 'role_id');
}
答案 1 :(得分:1)
您忘记了功能中的返回
要做:
返回 $ this-> belongsToMany('\ App \ User','fk_role_user','role_id','user_id');
返回 $ this-> belongsToMany('\ App \ Role','fk_user_role','user_id','role_id');
答案 2 :(得分:0)
确保您在模型函数关系中写入了 return。
return $this->hasMany('App\StaffShift','user_id','user_id');
答案 3 :(得分:0)
您需要将 Return 用于函数的结果。如果不这样做,Laravel 不知道应该如何处理该函数而不进行任何操作。 就这样使用
return $this->hasOne(xxx, xx, xx);
享受你的编码吧!