我有两张表帖子表和类别表。
每个帖子只有一个类别。
我想做什么
使用一个没有外键的类别ID连接每个帖子。
我为什么要这样做
因为我不想在每个帖子中复制类别字,我只想复制类别ID。
PostsController.php代码
$posts = Post::orderBy('id', 'DESC') -> limit(16) -> get();
@foreach($posts as $post)
dd($post -> categories() -> cat);
@endforeach
Posts.php模型代码
class Post extends Model
{
public function category() {
return $this->hasOne('App\Category');
}
}
问题
我收到错误问我外键,而我在类别表中没有外键。
答案 0 :(得分:2)
没有必要建立FK关系。如果您有办法告诉Laravel如何查找相关记录,它可以为您完成。例如
class Post extends Model
{
public function category() {
return $this->hasOne('App\Category','id','category_id');
}
}
上面将告诉Laravel,当您在category
中请求post
属性时,应从发布表中获取category_id
并在类别表中查找id
。如果两者都匹配,它将为您提供匹配的类别。
答案 1 :(得分:1)
关系应为belongsTo()
:
public function category() {
return $this->belongsTo('App\Category');
}
posts
表格无论如何都应该category_id
才能生效,但是如果没有foreign key constraint就可以使用它。
答案 2 :(得分:0)
class Post extends Model
{
public function category() {
return $this->belongsTo('App\Category','id','category_id');
}
}
它非常适合我。