laravel中的hasOne和belongsTo关系表

时间:2016-09-28 04:51:50

标签: laravel laravel-5

我的桌子:

用户:

SELECT * FROM ...

品牌:

statement stmt = (sql.prepare << "SELECT * FROM get_people()", into(person));

每个品牌的id fname email 都是id title user_id_made user_id_made表。

foreign key模型中的

users
用户模型中的

Brand

我有这样的品牌列表:

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

在我的控制器中我写了这段代码:

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); 错误:

foreach

3 个答案:

答案 0 :(得分: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');
}

答案 1 :(得分:0)

你使用了错误的关系。 hasOne用于一对一关系,但它应该是BrandUser之间的一对多关系。 (每个品牌由一个用户制作,每个用户可以制作多个品牌)

如果您声明Brand hasOne User,则Laravel将假定users表具有引用brands表的外键。

相反,请修改您的关系方法以使用belongsTo

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

答案 2 :(得分:0)

由于Brand模型有外键,所以这就是了 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