簡體   English   中英

Laravel 沒有外鍵的一對一關系

[英]Laravel one to one relationship without foreign key

我有兩個表,帖子表和類別表。

每個帖子只有一個類別。

我想做什么

將每個帖子與一個類別 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');
    }
}

問題

當我在類別表中沒有外鍵時,我收到一個錯誤,要求我輸入外鍵。

沒有必要有 FK 關系。 如果您有辦法告訴 Laravel 如何查找相關記錄,它可以為您完成。 例如

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

上面會告訴 Laravel 當你在post請求category屬性時,它應該從 post 表中獲取category_id並在 category 表中查找id 如果兩者匹配,它將為您提供匹配的類別。

關系應該是belongsTo()

public function category() {
    return $this->belongsTo('App\Category');
}

無論如何, posts表應該有category_id才能使其工作,但是您可以在沒有外鍵約束的情況下使用它。

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

它非常適合我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM