Laravel 没有外键的一对一关系

use*_*257 6 php mysql relational-database laravel

我有两个表,帖子表和类别表。

每个帖子只有一个类别。

我想做什么

将每个帖子与一个类别 ID 连接起来,无需外键。

为什么我要这样做

因为我不想在每个帖子中复制类别词,所以我只想复制类别 ID。

PostsController.php 代码

$posts = Post::orderBy('id', 'DESC') -> limit(16) -> get();

@foreach($posts as $post)

dd($post -> categories() -> cat);

@endforeach
Run Code Online (Sandbox Code Playgroud)

Posts.php 模型代码

class Post extends Model
{
    public function category() {
        return $this->hasOne('App\Category');
    }
}
Run Code Online (Sandbox Code Playgroud)

问题

当我在类别表中没有外键时,我收到一个错误,要求我输入外键。

Dhr*_*har 9

没有必要有 FK 关系。如果您有办法告诉 Laravel 如何查找相关记录,它可以为您完成。例如

class Post extends Model
{
    public function category() {
        return $this->hasOne('App\Category','id','category_id');
    }
}
Run Code Online (Sandbox Code Playgroud)

上面会告诉 Laravel 当你在 中请求category属性时post,它应该category_id从 post 表中获取并id在 category 表中查找。如果两者匹配,它将为您提供匹配的类别。


Ale*_*nin 3

关系应该是belongsTo()

public function category() {
    return $this->belongsTo('App\Category');
}
Run Code Online (Sandbox Code Playgroud)

无论如何,该posts表应该能够category_id使其工作,但是您可以在没有外键约束的情况下使用它。