Laravel ORM 的问题
控制器代码
public function index()
{
$user = Users::find(1);
dd($user->orders());
--------------------------------------------------------------------------------------------
$orders = Auth::guard('admin')->user()->orders();
dd($orders);
}
模型代码:
<?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User;
use App\Model\Orders;
class Users extends User
{
public $timestamps = false;
public $table = 'users';
public function orders()
{
return $this->hasMany(Orders::class,'id','accout_id');
}
}
分割线上下执行结果
不懂其中的原因,对orders()与orders的异同也有少许的不明白
order orders??
$xxx
是一个 model,$xxx()
是一个 relation (比如: hasMany、ManyToMany 等等)。$user->orders()
得到的是一个 relation ,$user->orders
得到的就是 collection ,也就是这个用户的订单组成的 collection。$orders = Auth::guard('admin')->user()->order()
这个语句是错误的,不能在 relation 上调用 relation ,正确的写法是$orders = Auth::guard('admin')->user->order()
,这里就可以得到一个 relation,或者$orders = Auth::guard('admin')->user->orders
,这里就会得到这个用户的订单组成的 collection 。@青风百里 $orders = Auth::guard('admin')->user->orders();这个也不对
@pigzzz 上面写错了 已纠正
@张无忌 这里得到的是 relation ,如果想要的得到订单,正确的写法是
$orders = Auth::guard('admin')->user->orders
如果是
$model->orders()
返回的是一个查询构造器,,后面可以接着做查询,最后得手动调用get|paginate|first
等查出结果:$model->orders()->where(xxx)->groupBy(xx)->get();
如果是
$model->orders
返回的是已经查询出来的Orders
模型实例的集合(Collection
类),,,最后就是
$model->orders()->get()
差不多等同于$model->orders
,,,问题已解决,谢谢各位了