php - 没有外键的 Laravel 一对一关系

标签 php mysql laravel relational-database

我有两个表,posts 表和 categories 表。

每个帖子只有一个类别。

What I am trying to do

在没有外键的情况下将每个帖子与一个类别 ID 连接起来。

Why I am trying to do this

因为我不想在每篇文章中都复制类别词,所以我只想复制类别 ID。

PostsController.php code

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

@foreach($posts as $post)

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

@endforeach

Posts.php model code

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

Problem

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

最佳答案

FK关系不是必须的。如果你有办法告诉 Laravel 如何查找相关记录,它可以为你做。例如

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

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

关于php - 没有外键的 Laravel 一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42734284/

相关文章:

javascript - Laravel PHP 脚本与对话框绑定(bind)

php - 将数组从模型传递到 Controller

php - 重定向,但隐藏推荐人

php - 将点语法如 "this.that.other"转换为 PHP 中的多维数组

php - 数组不包含数据库中的所有值

mysql - 1390 准备好的语句包含太多使用 Laravel 5.6 的占位符

php - 单击单选按钮时如何从 mysql 获取结果并使用 jquery 显示?

mysql - 尝试显示超链接时解析错误

mysql - 使用 where 子句获取所有结果

javascript - 如何在加载时在页面的下拉列表中选择事件项目