Laravel 5.1 - BelongsTo 关系 returns 空
Laravel 5.1 - BelongsTo relationship returns null
\App\User
class User
public function status() {
return $this->belongsTo('App\UserStatus', 'user_status_id', 'id');
}
\App\User状态
class UserStatus
protected $fillable = ['id'];
public function user() {
return $this->hasMany('App\User', 'user_status_id', 'id');
}
我已经从带有一些字段的简单 User::find()
查询中获得了 $user
对象,然后我尝试通过使用 $user->load('status')
延迟加载来访问 status
对象方法。
我正在关注文档,但它似乎没有用,因为 $user->status
仍然 return 为空。
public function foo(User $user) {
$user->load('status');
$user->status // returns null
}
我做错了什么?
------------解决方案--------
实际上,要延迟加载任何关系,外键值需要存储在模型对象中。
在我的 find
操作中,我没有查询 user_status_id
字段。当我将此字段添加到查询中时,$user->status
语句开始 return UserStatus
模型。
我认为 Laravel 文档中没有写此信息,它可能很简单,但我花了一些时间才弄明白。
在 status() 关系中用
替换行
return $this->belongsTo('\App\UserStatus', 'user_status_id');
在 user() 关系中与此
return $this->hasMany('\App\User', 'user_status_id');
长话短说,在 App 前添加一个 '\' 并删除第三个参数,因为它不是多对多关系。
还要确保您确实使用了 Eloquent,因此请在模型之上添加
namespace App;
use Illuminate\Database\Eloquent\Model;
class MODELNAME extends Model
并分配一个table
protected $table = 'model_table';
实际上,要延迟加载任何关系,外键值需要存储在模型对象中。
在我的查找操作中,我没有查询 user_status_id
字段。当我将此字段添加到查询中时,$user->status
语句开始 return UserStatus
模型。
我认为 Laravel 文档中没有写这些信息,它可能很简单,但我花了一些时间才弄明白。
我正在使用 Psy Shell 来 运行 它。对于 belongsTo() 中的第一个参数,它可能只是 Classname::class。我遇到了无法执行 belongsTo() 的情况,但是如果您重新启动 Psy Shell,它就可以了。虽然很奇怪。
\App\User
class User
public function status() {
return $this->belongsTo('App\UserStatus', 'user_status_id', 'id');
}
\App\User状态
class UserStatus
protected $fillable = ['id'];
public function user() {
return $this->hasMany('App\User', 'user_status_id', 'id');
}
我已经从带有一些字段的简单 User::find()
查询中获得了 $user
对象,然后我尝试通过使用 $user->load('status')
延迟加载来访问 status
对象方法。
我正在关注文档,但它似乎没有用,因为 $user->status
仍然 return 为空。
public function foo(User $user) {
$user->load('status');
$user->status // returns null
}
我做错了什么?
------------解决方案--------
实际上,要延迟加载任何关系,外键值需要存储在模型对象中。
在我的 find
操作中,我没有查询 user_status_id
字段。当我将此字段添加到查询中时,$user->status
语句开始 return UserStatus
模型。
我认为 Laravel 文档中没有写此信息,它可能很简单,但我花了一些时间才弄明白。
在 status() 关系中用
替换行return $this->belongsTo('\App\UserStatus', 'user_status_id');
在 user() 关系中与此
return $this->hasMany('\App\User', 'user_status_id');
长话短说,在 App 前添加一个 '\' 并删除第三个参数,因为它不是多对多关系。
还要确保您确实使用了 Eloquent,因此请在模型之上添加
namespace App;
use Illuminate\Database\Eloquent\Model;
class MODELNAME extends Model
并分配一个table
protected $table = 'model_table';
实际上,要延迟加载任何关系,外键值需要存储在模型对象中。
在我的查找操作中,我没有查询 user_status_id
字段。当我将此字段添加到查询中时,$user->status
语句开始 return UserStatus
模型。
我认为 Laravel 文档中没有写这些信息,它可能很简单,但我花了一些时间才弄明白。
我正在使用 Psy Shell 来 运行 它。对于 belongsTo() 中的第一个参数,它可能只是 Classname::class。我遇到了无法执行 belongsTo() 的情况,但是如果您重新启动 Psy Shell,它就可以了。虽然很奇怪。