gpt4 book ai didi

php - Laravel: Eloquent ,多对多关系,我如何只急切地加载相关模型的 ID?

转载 作者:太空宇宙 更新时间:2023-11-03 12:23:32 25 4
gpt4 key购买 nike

我正在使用 Eloquent 从名为“businesses”的表中选择一行。任何企业都可以与一个或多个“行业”相关联。我在业务模型中设置了这样的:

public function industries() {
return $this->belongsToMany('Industry');
}

在 Controller 中,当我选择模型时,我急于加载行业:

$mdl = Business::find($business_id);
$mdl->load('industries');
return Response::json($mdl);

这会返回如下内容:

{"id":123,"name":"My Business","address":"123 Easy Street","industries":[{"id":1,"name":"Technology"},{"id":7,"name":"Research"}]}

这几乎就是我所需要的。我只想让响应看起来像这样:

{"id":123,"name":"My Business","address":"123 Easy Street","industries":[1,7]}

我知道我可以做这样的事情:

$ind = array();
foreach($mdl->industries as $industry) $ind[] = $industry->id;
$mdl->industries = $ind;

不过我宁愿不那样做。它很丑陋,它让我的代码看起来非常非 Laravel。

我之所以想这样做,首先是因为当我保存业务时,我将使用这样的东西:

$mdl->industries()->sync(Input::get('industries'));

SYNC 方法只接受一个 ID 数组,所以我希望进出服务器的 JSON 对象具有相同的格式。我真的宁愿在加载它时不使用对象数组,在保存时不使用 id 数组。是否有针对此类事情的最佳实践或更简单的方法来完成我正在尝试做的事情?

谢谢!

最佳答案

$mdl = Business::with('industries')->find($business_id)->toArray();
$mdl['industries'] = array_pluck($mdl['industries'], 'id');
return $mdl;

如果您经常使用它,请将以下方法添加到您的 Business 模型中:

public static function getWithIdustryIds ($business_id)
{
$mdl = Business::with('industries')->find($business_id)->toArray();
$mdl['industries'] = array_pluck($mdl['industries'], 'id');
return $mdl;
}

关于php - Laravel: Eloquent ,多对多关系,我如何只急切地加载相关模型的 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18679560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com