2017-06-12 107 views
0

我有兩張表 - 兩者都是遺留的。Laravel 5.4雄辯關係不太對

一張桌子,國家,剛剛v領域:

entry (index field) 
Countryname 
Abbrev 

我的另一臺是PCustomers它(其中包括)具有

Reference (index field) 
country (the foreign key) 

我有兩個模型建立:

class Countries extends Model 
{ 
    protected $table="Countries"; 
    protected $primaryKey = 'entry'; 

    function pcustomer() 
     { 
      return $this->hasMany('App\PCustomer','country','entry'); 
     } 
} 

and

class PCustomer extends Model 
{ 
    protected $table = 'p_customers'; 
    protected $primaryKey = 'Reference'; 

    public function country() 
     { 
      return $this->hasOne('App\Countries','entry','country'); 
     } 

    public function addnew(Request $request) 
     { 

     } 
} 

要嘗試了這一點,我放在一個控制器:

public function PCustomers() 
     { 
      $customer = PCustomer::find(5955)->country; 
      dd($customer); 
     } 

我知道5955存在,它的國家是74

的DD返回74,但沒有別的。

如果我把國家,所以它成爲

$customer = PCustomer::find(5955); 

我得到通常和正確的收集與全域。

我認爲應該發生的是 - >國家,我會得到記錄的細節加上3場來自全國各地,而不僅僅是74

幫助讚賞!

+0

我發現我可以用下面的行得到這樣的: '$客戶= PCustomer :: where('Reference',5955) - > with('country') - > get();' 但這似乎與文檔不一致。 – Jim

+0

不,如果你做' - >國家',那麼只有國家記錄將被退回。這是預期的行爲。你的解決方案是正確的,只不過你最好用'first()'替換'get()',因爲你只需要一條記錄。當然,你可以堅持你所做的,但它會返回一個[集合](https://laravel.com/docs/5.4/eloquent-collections)而不是記錄。 – Fahmi

回答

0

我發現我可以用下面的行得到這樣的:

$customer = PCustomer::where('Reference',5955)->with('country')->get(); 

但這似乎有差異的文檔