在我的用户模型中,我有2个关联
public function role()
{
return $this->belongsTo(Role::class, 'role_id');
}
public function city()
{
return $this->belongsTo(City::class, 'city_id');
}
我使用时第二个城市不起作用
$user = App\User::findorfail(1)->with('city')->first();
例如。它给出了消息
Illuminate/Database/Eloquent/RelationNotFoundException with message 'Call to undefined relationship [city] on model [App/User].
Class City是
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class City extends Model
{
use SoftDeletes;
protected $fillable = ['name', 'nomos_id','user_id'];
protected $table = 'cities';
public function setNomosIdAttribute($input)
{
$this->attributes['nomos_id'] = $input ? $input : null;
}
public function nomos()
{
return $this->belongsTo(Nomoi::class, 'nomos_id')->withTrashed();
}
}
出什么问题了?为什么一种关系有效而另一种无效。
答案 0 :(得分:0)
将代码$this->belongsTo(City::class, 'city_id')
视为hasOne关系的逆向对象,该关系最终将寻找“用户所属”的城市?
这是此关系结构的预期目的吗?如果与它成反比,那么我们正在寻找一个“属于用户”的城市,如果它是一对多关系,则应该使用$this->hasOne(City::class, 'city_id')
中的$this->hasMany(City::class, 'city_id')
。>
答案 1 :(得分:0)
with()
调用应在find()
,first()
,findOrFail
,firstOrFail()
或get()
之前进行
这应该是您渴望向City
加载User
的全部。
$user = App\User::with('city')->findOrFail(1);
但是,如果您需要在first()
上显式调用City
,则应该使用:
$user = App\User::with(['city'->function($query){
return $query->first();
})->findOrFail(1);