我有两个雄辩的模型:
1)发布
class Post extends Model
{
protected $table = 'posts';
protected $fillable = ['id', 'user_id', 'product_id', 'site_id', 'link_id', 'body', 'created_at', 'updated_at'];
public function user(){
return $this->belongsTo(User::class);
}
public function product(){
return $this->belongsTo(Product::class);
}
2)产品
protected $table = 'products';
protected $fillable = ['id', 'user_id', 'manufacturer_id', 'shift_product_id', 'name', 'english_name',
'slug', 'text', 'spec', 'live', 'created_at', 'updated_at'];
public function posts(){
return $this->hasMany(Post::class);
}
我需要从帖子中获取产品 我这样做:
$posts = Post::get();
foreach($posts as $key){
dd($key->product);
}
像这样返回NULL
如果我喜欢这样:
dd($key->product());
我得到了产品,但我无法使用它
但我需要得到类似的东西来使用我需要的东西:
答案 0 :(得分:1)
尝试指出关系中的foregin键和其他键,例如:
public function post()
{
return $this->belongsTo('App\Post', 'foreign_key', 'other_key');
}
public function user()
{
return $this->belongsTo('App\User', 'foreign_key', 'other_key');
}
答案 1 :(得分:1)
数据库中可能不存在这种关系。
根据fillable
上的Post
数组,您遵循关键字的命名约定并且belongsTo
关系方法具有正确的名称,因此关系设置的方式看起来正确约定。
$post->product()
未返回您的Product
模型。它返回Relation
类型对象(BelongsTo
)。这用于查询关系。 $post->product
将是关系的动态属性,它将返回已加载的关系或加载关系并为您提供结果。
Laravel 5.5 Docs - Eloquent - Relationships - Relationship Methods Vs. Dynamic Properties
如果关系设置正确$post->product
为null
则意味着数据库中实际上不存在关系,id
中products
没有匹配product_id
}或product_id
为空。 (假设没有外键约束)
旁注:急切加载这种关系是一个好主意:
$posts = Post::with('product')->get();
答案 2 :(得分:1)
我刚遇到这篇文章是因为在处理项目时遇到类似的错误。
我发现的是,当您使用all()方法查询模型时,它会忽略相关的软删除行。
当您尝试访问它们时,会得到空值
答案 3 :(得分:0)
我发现了我的问题 我没有ID = 1的DB产品 :/ 问题
谢谢你从我这里得到的所有帮助。答案 4 :(得分:0)
记住在关联和解除关联后点击save()。有几次我了:
$model->relation()->associate($record)->save();