Laravel没有外键的一对一关系

时间:2017-03-11 10:50:19

标签: php mysql laravel relational-database

我有两张表帖子表和类别表。

每个帖子只有一个类别。

  

我想做什么

使用一个没有外键的类别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');
    }
}
  

问题

我收到错误问我外键,而我在类别表中没有外键。

3 个答案:

答案 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');
    }
}

它非常适合我。