我看model里面一般都是写belongsTo或者hasMany这些 写这些有什么用呢?下面是别人的Car模型中的代码 我看他在控制器中用的时候这样写的$car = Car::find($id)
这样好像也没有什么方便的啊 还如直接写DB::table('car')呢 为什么模型中要写belongsTo、hasMany这些玩意呢?
public function user()
{
return $this->belongsTo(User::class);
}
我看model里面一般都是写belongsTo或者hasMany这些 写这些有什么用呢?下面是别人的Car模型中的代码 我看他在控制器中用的时候这样写的$car = Car::find($id)
这样好像也没有什么方便的啊 还如直接写DB::table('car')呢 为什么模型中要写belongsTo、hasMany这些玩意呢?
public function user()
{
return $this->belongsTo(User::class);
}
public function user()
{
return $this->belongsTo(User::class, 'id', 'uid');
}
这样写的话,代表你car表里的id跟user表的uid是关联起来的,然后你用的时候可以直接这样使用
$car = Car::find($id)->with('user')->get();
这样你就相当于把两张表的数据查出来了。具体的你可以看看laravel 的orm
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答566 阅读✓ 已解决
784 阅读
使用模型和模型关系的好处是:
join
的时候还得去关心join
的外键是叫xx_id
呢还是叫id
呢join
便于阅读。而且关系可以一直连下去,如:$order->user->userAddress->province->name
,如果用join
的话得join
3个表。creating
、updating
、deleting
等事件,举个例子,当用户下单时需要给用户发一条短信,就可以监听order
的created
事件进行编码,不用把发短信代码放在创建订单的代码里;再举个例子,添加商品分类需要加个日志功能,但是添加分类有多个入口,比如在添加商品的时候可以输入个新分类添加商品同时添加分类,也可以在分类管理里去单独加分类,而这两个入口的添加分类的代码都是Category::create([xx])
,如果要写日志的话使用模型监听器只需要在一个地方写即可。可以了解下。但如果他用的是DB::table()->insert
的话是做不到只修改一个地方完成这功能的。不能只考虑眼前的控制器,假如还有个order,存了个user_id,要输出user_name,定义好关系的话直接
$order->user->user_name
即可;假如还有个用户地址、用户优惠、用户xxx各种,每次join不觉得麻烦嘛。。