Laravel 反向关联对象是否与原始对象相同?
我已经使用Laravel好几个月了,这让我很烦恼 考虑下面的例子 有两个雄辩的模型,其关系定义如下Laravel 反向关联对象是否与原始对象相同?,laravel,eloquent,Laravel,Eloquent,我已经使用Laravel好几个月了,这让我很烦恼 考虑下面的例子 有两个雄辩的模型,其关系定义如下 class Customer extends \Illuminate\Database\Eloquent\Model { public function orders() { return $this->hasMany(Order:class); } } class Order extends \Illuminate\Database\Eloque
class Customer extends \Illuminate\Database\Eloquent\Model
{
public function orders()
{
return $this->hasMany(Order:class);
}
}
class Order extends \Illuminate\Database\Eloquent\Model
{
public function customer()
{
return $this->belongsTo(Customer:class);
}
}
$customer1 = Customer::select()
//->where('id', '=', 1)
->with('orders')
->first();
$customer2 = $customer1->orders[0]->customer;
if ($customer1 === $customer2) {
echo 'Same'. PHP_EOL;
} else {
echo 'Not the same'. PHP_EOL;
}
$customer1
和$customer2
应该相同。但事实并非如此。
我想要的是,
$customer1
和$customer2
是一样的,就像
使用单词same,我的意思是它们应该是相同的实例,而不是具有相同客户数据的两个实例
我错过什么了吗?任何帮助都将不胜感激。Laravel没有活动记录实施。没有主控器跟踪从数据库中获取的对象。每个对象跟踪自己的更改,但不知道内存中存在的其他对象。从您的关系中,您可以看到每个客户都可以有多个订单,订单必须有一个客户。所以在$customer1变量中,有一个雄辩的模型对象,在$customer2中有一个id。如何比较它们??试着在ID和ID之间进行比较。拉威尔并没有按照你所期望的方式工作
$customer1 = Customer::select()
//->where('id', '=', 1)
->with('orders')
->first();
$customer2 = $customer->orders[0]->customer;
if ($customer1->id === $customer2) {
echo 'Same'. PHP_EOL;
} else {
echo 'Not the same'. PHP_EOL;
}
$customer1
和$customer2
包含完全相同的数据,对吗?所以它们应该是同一个实例。不,它们不一样$customer1是有说服力的对象,$customer2是普通id为什么$customer2
是普通id?您能解释一下吗?$customer1->orders[0]->customer这里您访问的是一个对象,然后是一个数组,然后是一个普通列,它实际上是该列的值,您从$customer1访问。所以$customer2只是$customer1对象的一个值形式,它是一对多关系。每个客户都有很多订单。因此,$customer1->orders
将是一个订单数组。同时,$customer1->orders[0]
将是一个有说服力的实例,而$customer1->orders[0]->customer
将是一个客户。看起来没有办法“告诉”$orders
您的客户已经被拉出来了,您不需要再次从数据库中拉出来。