我的 Laravel 项目中有三种不同的模型;车队、用户、司机。驱动程序与用户是不同的模型,因为它们无法进行身份验证。不管怎样,还有一种模型:Address。
我将地址值存储在
addresses
表,地址模型中。下面给出了列;
addresses
: addressable_type (int)
, addressable_id (int)
...
还有一个名为 Type 的模型,它存储项目中所有内容的类型。例如,它存储授权类型(超级用户、用户、管理员等)、在 Models\ 路径下给出的雄辩模型类型(App\Models\User、App\Models\Driver 等)、付款类型等...
我想你已经明白我要问你什么了,但让我们继续。如果你明白的话,我没有将
addresses
.addressable_type
的类型设置为 varchar(255)
。通常,多态模型可以读取 App\Models\*
格式,但我想从 types
.id
表中存储雄辩模型的 id。
addressable_type | 1
addressable_id | 10 // this refers to `types`.`id`
country | 225
state | 2175
city | 108155
address | NULL
status | 1
created_at | 2024-08-31 14:50:13
updated_at | 2024-08-31 14:50:13
id | 10
type | App\Models\Convoy // so this is record in the types table
label | 2
created_at | 2024-08-31 14:50:12
updated_at | 2024-08-31 14:50:12
Convoy.php 如下;
class Convoy extends Model
{
use HasFactory;
protected $guarded = [];
public function address() : MorphOne
{
return $this->morphOne(Address::class, 'addressable');
}
}
地址.php如下;
class Address extends Model
{
use HasFactory;
protected $guarded = [];
public function addressable() : MorphTo
{
return $this->morphTo();
}
public function status() : BelongsTo
{
return $this->belongsTo(Status::class);
}
}
HomeController.php 如下;
public function convoys() : View
{
$test = Convoy::with('address')->find(6);
dd($test);
return view('convoys', compact('convoys'));
}
结果;
App\Models\Convoy {#1228 ▼ // app/Http/Controllers/HomeController.php:50
...
#relations: array:1 [▼
"address" => null
]
...
}
我找不到任何地址。
试试这个
class Address extends Model
{
......
public function addressable()
{
return $this->morphTo()->morphWith([
App\Models\Convoy::class => ['addressable_type'],
App\Models\User::class => ['addressable_type'],
App\Models\Driver::class => ['addressable_type'],
]);
}
....
}