【发布时间】:2018-12-29 00:54:38
【问题描述】:
在我的用户模型中,我有 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].
类城市是
<?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();
}
}
有什么问题?为什么一种关系有效而另一种无效。
【问题讨论】:
-
愚蠢的问题,但 city() 是 App\User 中的一个方法,对吧?
$user = App\User::findorfail(1)->with('city')->first();是一个很奇怪的电话,你为什么不直接打User::with('city')->findOrFail(1);呢?但是,当只加载一个模型时,急切加载关系的优势非常有限。 -
是一样的。问题是它没有找到模型
-
可能与错误无关,但删除
first()。findOrFail将始终返回第一条记录,如果没有找到则失败。 -
你也可以试着换个角度看:
User::with('city')->findOrFail(1);. -
是的,City 是一个类似于模型类中声明的所有方法的方法。也是相同的 App\User::findorfail(1)->with('city')->first();和 User::with('city')->findOrFail(1)->first();
标签: php laravel relationships