2
我有三個表這樣laravel morphTo如何使用自定義列?
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----|
示範企業:
class Company extends Model
{
public function business() {
return $this->morphMany('App\Models\Business', 'owner');
}
}
型號個人:
class Personal extends Model
{
public function business() {
return $this->morphMany('App\Models\Business', 'owner');
}
}
模型業務:
class Business extends Model
{
public function owner(){
return $this->morphTo();
}
}
IndexCont輥:
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'));
}
}
觀點:index.blade
<table bgcolor="#7fffd4" width="400">
<tr>
<td colspan="3" bgcolor="#f5f5dc" align="center">BUSINESS</td>
</tr>
<tr>
<td bgcolor="#f0f8ff">ID</td>
<td bgcolor="#f0f8ff">OWNER_TYPE</td>
<td bgcolor="#f0f8ff">NAME</td>
</tr>
@foreach($businesses as $business)
<tr>
<td bgcolor="#f0f8ff">{{$business->id}}</td>
<td bgcolor="#f0f8ff">{{$business->owner_type}}</td>
<td bgcolor="#f0f8ff">{{object_get($business->owner, 'name', 'unfind')}}</td>
</tr>
@endforeach
</table>
當我運行的應用,該名稱是 「unfind」
這裏我用debuger 我找到的查詢是:
//select * from `businesses`
//select * from `companies` where `companies`.`id` in ('')
//select * from `personals` where `personals`.`id` in ('')
select * from `businesses`
select * from `companies` where `companies`.`id` in ('company_code_01', 'company_code_02')
select * from `personals` where `personals`.`id` in ('personal_code_01')
在laravel文件中,這個列就像owner_type owner_id, 在這裏,我想使用自定義列
我不知道該怎麼做。
我都試過了,結果是錯誤的。在這裏,我想用我的自定義列 –
檢查我的更新 – EddyTheDove
在這裏,我的主鍵是'ID',然後最終SQL是
select * from'companies' where'companies'.'id ('')
select * from'personals' where'personals'.'id' in('')
–