模型 returns 关系的动态属性但是空关系
Model returns relation´s dynamic attributes but null relation
我已经设置了 2 个模型(Post 和类别)并配置了适当的关系
class Post extends Model
{
protected $fillable = [
'title',
'excerpt',
'body',
'featured',
'published',
'category_id',
];
public function category()
{
return $this->belongsTo('App\Category');
}
}
class Category extends Model
{
protected $fillable = [
'name',
];
public function posts()
{
return $this->hasMany('App\Post');
}
}
而我的Post存储方法是
public function store(Request $request)
{
$post = Post::create($request->all());
return redirect('admin/posts');
}
问题是,它实际上工作正常,它在 table 上设置 category_id
,我可以使用 $post->category->name
获取所有动态数据,但是当我var_dump($post->relation)
我得到一个 null
return.
我如果创建一个新的 Post 模型,设置所有属性,保存它,然后关联类别模型(如官方频道中所述),它将 return 一切如预期。
现在,我只需要获取它的动态属性,它现在工作正常,但我知道我一定是做错了什么才能得到空响应。我担心它现在可能工作正常,但当项目变大时,我可能会面临更大的问题,我将有很多工作来解决这个问题。
关系不存在,因为您还没有加载它。它只知道外键。如果它为您获取所有这些信息,那将是非常低效的,因为它并不总是需要所有这些。想一想单个模型可能有很多关系的情况,那将是无缘无故的许多数据库调用。
如果需要关系,可以使用$post->category
。由于关系尚未加载,当您执行此操作时它会为您获取它。
或者您可以使用以下 $post->load('category')
预先加载它,尽管这对您并没有真正的好处,因为此时您正在使用单个 Post
。如果你有一个 Post
对象的集合,那么你会开始看到使用 $posts->load('category')
的好处,否则你最终会遇到 n + 1 个问题。
因此,如果您使用 $post->load('category')
,然后使用 var_dump($post)
,您应该会看到关系不再为空。
我已经设置了 2 个模型(Post 和类别)并配置了适当的关系
class Post extends Model
{
protected $fillable = [
'title',
'excerpt',
'body',
'featured',
'published',
'category_id',
];
public function category()
{
return $this->belongsTo('App\Category');
}
}
class Category extends Model
{
protected $fillable = [
'name',
];
public function posts()
{
return $this->hasMany('App\Post');
}
}
而我的Post存储方法是
public function store(Request $request)
{
$post = Post::create($request->all());
return redirect('admin/posts');
}
问题是,它实际上工作正常,它在 table 上设置 category_id
,我可以使用 $post->category->name
获取所有动态数据,但是当我var_dump($post->relation)
我得到一个 null
return.
我如果创建一个新的 Post 模型,设置所有属性,保存它,然后关联类别模型(如官方频道中所述),它将 return 一切如预期。
现在,我只需要获取它的动态属性,它现在工作正常,但我知道我一定是做错了什么才能得到空响应。我担心它现在可能工作正常,但当项目变大时,我可能会面临更大的问题,我将有很多工作来解决这个问题。
关系不存在,因为您还没有加载它。它只知道外键。如果它为您获取所有这些信息,那将是非常低效的,因为它并不总是需要所有这些。想一想单个模型可能有很多关系的情况,那将是无缘无故的许多数据库调用。
如果需要关系,可以使用$post->category
。由于关系尚未加载,当您执行此操作时它会为您获取它。
或者您可以使用以下 $post->load('category')
预先加载它,尽管这对您并没有真正的好处,因为此时您正在使用单个 Post
。如果你有一个 Post
对象的集合,那么你会开始看到使用 $posts->load('category')
的好处,否则你最终会遇到 n + 1 个问题。
因此,如果您使用 $post->load('category')
,然后使用 var_dump($post)
,您应该会看到关系不再为空。