gpt4 book ai didi

php - Laravel - 反向多态关系

转载 作者:行者123 更新时间:2023-12-03 15:29:05 25 4
gpt4 key购买 nike

我基本上有两种相同类型的模型(狗和猫):宠物。表 pets 连接数据库中的所有狗和猫。现在我希望能够通过 PetController 中的 pet id 找到特定的宠物。像这样:

$pet = Pet::findOrFail($id); // returns a dog or cat
表结构:
┌──────────────┐  ┌───────────┐  ┌───────────┐
│ pets │ │ dogs │ │ cats │
├──────────────┤ ├───────────┤ ├───────────┤
│ id │ │ id │ │ id │
│ related_type │ │ name │ │ name │
│ related_id │ │ eye_color │ │ tail_size │
└──────────────┘ └───────────┘ └───────────┘
宠物表:
┌────┬──────────────┬────────────┐
│ id │ related_type │ related_id │
├────┼──────────────┼────────────┤
│ 1 │ dog │ 1 │
├────┼──────────────┼────────────┤
│ 2 │ dog │ 2 │
├────┼──────────────┼────────────┤
│ 3 │ cat │ 1 │
└────┴──────────────┴────────────┘
我搜索了 Laravel 文档,但似乎没有一个关系适合这个问题。只有多态关系会反过来工作,这样我就可以通过 dog- 或 cat-id 访问宠物模型。但我正在寻找一种相反的解决方案。有没有不需要在 PetController 中手动使用讨厌的 if-else 的关系?
谢谢!

最佳答案

您可以像这样定义这 3 个模型之间的多态关系

宠物模型

public function related(){
$this->morphTo();
}

狗模型
public function pets(){
$this->morphMany('App\Pet', 'related');
}

猫模型
public function pets(){
$this->morphMany('App\Pet', 'related');
}

现在像这样获取它
$pet = Pet::findOrFail($id)->related;
dd($pet); //you will get either cat or dog

轻松创建
$dog = Dog::create(['name'=> 'dog1', 'eye_color' => 'gray']);
$dog->pets()->create();

在此处查看详细信息 https://laravel.com/docs/5.6/eloquent-relationships#polymorphic-relations

关于php - Laravel - 反向多态关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51303828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com