属于与laravel中的json列的关系
这是一个很棒的软件包: 但我不能 让它在几天的奋斗中发挥作用。让我解释一下我的情况 还有我的方法 orders表的json类型列名为属于与laravel中的json列的关系,laravel,Laravel,这是一个很棒的软件包: 但我不能 让它在几天的奋斗中发挥作用。让我解释一下我的情况 还有我的方法 orders表的json类型列名为sender\u address,具有以下值: { "title":"office", "street":"Mohakhali Flyover", "lat":"23.7794099", "lng":"
sender\u address
,具有以下值:
{
"title":"office",
"street":"Mohakhali Flyover",
"lat":"23.7794099",
"lng":"90.3983494",
"district":"1",
"area":"2"
}
我的订单型号定义:
class Order extends Model
{
use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;
/**
* @var string The database table used by the model.
*/
public $table = 'orders';
/**
* @var array Validation rules
*/
public $rules = [
];
protected $casts = [
"sender_address" => "array"
];
public $belongsTo = [
'client' => [ '\ItScholarBd\Api\Models\User'],
'customer' => [ 'ItScholarBd\Order\Models\Customer'],
'district' => [ 'ItScholarBd\Location\Models\District'],
'clientArea' => [ '\ItScholarBd\Location\Models\Area','sender_address->area']
];
}
用法:
$records = Order::with(['client.company','clientArea'])->get();
在这里,我只想获得与发件人地址->区域匹配的\ItScholarBd\Location\Models\Area
数据。但是,$records
显示以下数据:
Array
(
[0] => Array
(
[id] => 1
[number] => AWB2000001
[sender_address] => Array
(
[title] => office
[street] => Mohakhali Flyover
[lat] => 23.7794099
[lng] => 90.3983494
[district] => 1
[area] => 2
)
[client_id] => 309
[client] => Array
(
[id] => 309
[name] => client
[email] => client@gmail.com
[password] => $2y$10$BIQgKvOV4h0lWOO66W6CC.rCEnFB6c6mBCh3WF2t1eDFueEJmgb7y
[activation_code] =>
[persist_code] => $2y$10$1Njt/420DYIyW3azOYh9z./WwURdgFf.7JKCGE0jqjTQmBPK/nmSe
[reset_password_code] =>
[permissions] =>
[is_activated] => 1
[activated_at] => 2020-11-27 18:41:04
[last_login] => 2020-12-17 13:50:48
[created_at] => 2020-11-27 18:41:04
[updated_at] => 2020-12-17 13:50:48
[username] => client
[surname] =>
[deleted_at] =>
[last_seen] => 2020-12-17 16:55:42
[is_guest] => 0
[is_superuser] => 0
[phone] =>
[company] => Array
(
[id] => 4
[name] => Bracnect Academy
[email] => academy@bracnet.net
[url] => https://academy.bracnet.net/
[phone] => 01708006884
[alt_phone] => 01709007885
[address] => mohakhali
[product_type] => Course
[created_at] => 2020-12-02 16:20:54
[updated_at] => 2020-12-02 16:22:23
[code] => bracnectacademy
)
)
[client_area] =>
)
)
这里的客户端区域是空的。但是我将a记录所在的区域表翻了一番,其中id=2
。我的方法有什么问题?我为这个问题挣扎了两天。有什么想法吗?我从未见过有人这样定义关系,也没有在文档中找到:
public $belongsTo = [
'client' => [ '\ItScholarBd\Api\Models\User'],
'customer' => [ 'ItScholarBd\Order\Models\Customer'],
'district' => [ 'ItScholarBd\Location\Models\District'],
'clientArea' => [ '\ItScholarBd\Location\Models\Area','sender_address->area']
];
我认为如果你这样定义关系:
public function clientArea(){
return $this->belongsTo('\ItScholarBd\Location\Models\Area', 'sender_address->area');
}
它应该会起作用
不要忘记在区域模型中使用HasJsonRelationships特性。非常感谢,亲爱的。我如何应用这种关系?是Order::with(['client.company'])-clientArea()->get()?订单::with(['client.company','clientrea'])->get()。您需要添加关系函数名。请检查此语句的返回值:Order::find(1)->clientrea。