2017-02-13 33 views
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, 在這裏,我想使用自定義列

我不知道該怎麼做。

回答

1

出於慣例的目的,您可能需要在business表中將owner_code替換爲owner_id

在商業模式中,你會像你一樣做。

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

companypersonal模型,您添加

public function business() { 
    return $this->morphMany('App\Business', 'owner'); 
} 

然後,你可以做

$busines = Business::first(); 
$busines->owner->name //should echo 'ibm' 

更新

來定義變形關係的外鍵,你做

public function business() { 
    return $this->morphMany('App\Models\Business', 'owner', 'business', 'owner_code'); 
    //Model, name, table, foreign key 
} 

morphToMany()函數定義如下:

public function morphToMany($related, $name, $table = null, $foreignKey = null, $otherKey = null, $inverse = false){} 
+0

我都試過了,結果是錯誤的。在這裏,我想用我的自定義列 –

+0

檢查我的更新 – EddyTheDove

+0

在這裏,我的主鍵是'ID',然後最終SQL是
select * from'companies' where'companies'.'id ('')
select * from'personals' where'personals'.'id' in('')