[英]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.