有如下三张表
business:
| id | owner_code | owner_type |
|---|---|---|
| 1 | WSWJDIXSWS | company |
| 2 | ADSOOEKL23 | personal |
company:
| id | code | name |
|---|---|---|
| 1 | WSWJDIXSWS | ibm |
| 2 | SDFSDFSDFS | h3c |
presonal:
| id | code | name |
|---|---|---|
| 1 | ADSOOEKL23 | jack |
| 2 | SDFSDFSDFS | brown |
对应的model
Model Company:
class Company extends Model
{
public function business() {
return $this->morphMany('App\Models\Business', 'owner');
}
}
Model Personal:
class Personal extends Model
{
public function business() {
return $this->morphMany('App\Models\Business', 'owner');
}
}
Model Business:
class Business extends Model
{
public function owner(){
//return $this->morphTo();
return $this->morphTo('owner', 'owner_type', 'owner_code');
}
}
IndexController:
class IndexController extends Controller
{
public function index(){
//DB::connection()->enableQueryLog();
//$queries = DB::getQueryLog();
$businesses = Business::get();
$businesses->load('owner');
return view('index')->with(compact('businesses'));
}
}
view:index.blade
BUSINESS
ID
OWNER_TYPE
NAME
@foreach($businesses as $business)
{{$business->id}}
{{$business->owner_type}}
{{object_get($business->owner, 'name', 'unfind')}}
@endforeach
执行后结果全是 unfind!
使用 debuger组件
得到执行后的语句如下:
select * from `businesses`
select * from `companies` where `companies`.`id` in ('')
select * from `personals` where `personals`.`id` in ('')
laravel 的文档里都是用类似, owner_type owner_id, 没写怎么用自己定义字段
折腾半天了,请解,不胜感激
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
多看文档多实践多用智能IDE。
morphMany有5个参数。