2016-09-28 127 views
0

我的表:hasOne和屬於關聯關係表

用戶:

id fname email 

品牌:

id title user_id_made 

每個品牌都有user_id_madeusers表的foreign key

public function user() 
{ 
    return $this->hasOne('App\Models\User','id'); 
} 

在用戶模式:

Brand模型

public function brand() 
{ 
    return $this->belongsTo('App\Models\Brand','user_id_made'); 
} 

我有這樣的品牌列表:

title of brand  - email of user that made it 
在我的控制器

我寫這篇文章的代碼:

$data['brands'] = Brand::with('user')->simplePaginate(2); 

在視foreachtrying to get non-object property錯誤:

  @foreach($brands as $brand) 



       <tr> 
       <td>{{$brand->title_fa}}</td> 
       <td>{{$brand->title_en}}</td> 
       <td>{{$brand->user->fname}}</td> // error line 

回答

1

這將給這個品牌的用戶的品牌名稱和電子郵件。

$brands=Brand::with('user')->get(); 
foreach($brands as $brand) 
{ 
    print_r($brand->title); 
    print_r($brand->user->email); 
} 

在品牌型號的關係:

public function user() 
{ 
    return $this->hasOne('App\Models\User','user_id_made'); 
} 
0

您使用了錯誤的關係。 hasOne用於一對一的關係,但它應該是您的BrandUser之間的一對多關係。 (每個品牌由一個用戶所做的每個用戶可以進行一個以上的品牌)

如果你指出一個BrandhasOneUser,Laravel假定有一個外鍵引用的brandsusers表。

相反,請修改您的關係方法以使用belongsTo

public function user() { 
    return $this->belongsTo('App\Models\User', 'user_id_made'); 
} 
0

由於品牌型號有外鍵,這是該 belongsTo()方法應該是側面。

如果在命名外鍵user_id時使用了慣例,那麼 會更直接。

但是,如果出於某種原因,你需要有user_id_made名稱爲列,

這是你應該通過什麼作爲關係的雙方第二個參數。

User應該有hasOne('App\Brand', 'user_id_made')

Brand應該有belongsTo('App\User', 'user_id_made')

https://laravel.com/docs/5.3/eloquent-relationships