【发布时间】:2019-06-01 23:30:09
【问题描述】:
美好的一天!我认为我做错了什么或者我误解了 Eloquent 的做法。
我有三张桌子。
- 订单{市、县}
- 城市 { id, name }
- 县 { id, name }
我正在使用 Laravel Eloquent 一对多反向关系对这些表执行查询。 orders.city 拥有cities 的一个id,orders.county 拥有counties 的一个id。下面是我的模型的代码。
应用\订单
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Orders extends Model
{
/*
* Table name
*/
protected $table = 'orders';
/*
* Get county
*/
public function county()
{
return $this -> hasOne('App\Counties', 'id', 'county');
}
/*
* Get city
*/
public function city()
{
return $this -> hasOne('App\Cities', 'id', 'city');
}
}
应用\县
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Counties extends Model
{
protected $table = 'account_county';
public $timestamps = false;
/*
* Counties relationship
*/
public function county()
{
return $this -> belongsTo('App\Orders', 'county', 'id');
}
}
应用\城市
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Cities extends Model
{
protected $table = 'account_city';
public $timestamps = false;
/*
* City relationship
*/
public function city()
{
return $this -> belongsTo('App\Orders', 'city', 'id');
}
}
当我在 Tinker 中执行以下操作时:$order = App\Orders::with(['city', 'county']) -> first();
....我得到以下响应:
App\Orders {#3042
county: App\Counties {#3041
id: 23,
name: "Argeș",
},
city: App\Cities {#3046
id: 6924,
name: "Argeșelu",
},
}
现在当我运行以下代码时:$order -> city
我收到以下回复:
"6924"
当我执行以下代码时:$order -> City
我得到了整个收藏:
App\Cities {#3046
id: 6924,
name: "Argeșelu",
},
为什么我需要将属性的第一个字母大写才能获取集合实例?在documentation 中,它声明我应该直接使用动态属性名称:$order -> city 但是在我的情况下,这将返回原始字符串 ID 而不是集合实例。我错过了什么吗?我担心性能和良好实践的原因。如果这是一个不好的问题,或者已经在其他地方解释过,我深表歉意。
【问题讨论】:
标签: php laravel eloquent relationship