You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.5中如何更优地从函数返回两个模型并在新函数中调用?

嘿,我来给你几个更优雅的方案,比直接返回索引数组好用多了,后续访问的时候也更清晰直观:

推荐方案1:返回带明确键名的关联数组(最常用)

直接给每个结果起一个语义化的键名,后续调用时不用记索引位置,可读性拉满:

public function getDetails($id) { 
    // 注意:first()返回单个模型,变量名改成单数更贴合语义
    $instrument = Instruments::join('revisions', 'revisions.id', '=', 'instruments.revisions_id') 
        ->orderBy('instruments.name') 
        ->first(); 
    // get()返回模型集合,变量名用复数更合理
    $teams = Team::join('instruments', 'teams.instruments_id', '=', 'instruments.id') 
        ->orderBy('instruments.name') 
        ->get(); 

    // 用关联数组返回,键名清晰对应结果
    return [
        'instrument' => $instrument,
        'teams' => $teams
    ]; 
}

在其他函数里调用访问的示例:

$details = $this->getDetails($yourId);
// 直接通过键名获取,不用猜索引
$targetInstrument = $details['instrument'];
$allTeams = $details['teams'];
推荐方案2:使用Laravel集合(适合后续做集合操作)

如果后续你需要对返回的结果做过滤、排序等Laravel集合专属操作,可以把它们包装成Collection对象:

use Illuminate\Support\Collection;

public function getDetails($id) { 
    $instrument = Instruments::join('revisions', 'revisions.id', '=', 'instruments.revisions_id') 
        ->orderBy('instruments.name') 
        ->first(); 
    $teams = Team::join('instruments', 'teams.instruments_id', '=', 'instruments.id') 
        ->orderBy('instruments.name') 
        ->get(); 

    return new Collection([
        'instrument' => $instrument,
        'teams' => $teams
    ]);
}

调用访问示例:

$details = $this->getDetails($yourId);
// 用集合的get方法获取
$targetInstrument = $details->get('instrument');
$allTeams = $details->get('teams');

// 还能直接用集合的便捷方法,比如判断结果是否存在
if ($details->has('instrument')) {
    // 执行相关逻辑
}
简洁写法:使用compact函数

如果你的变量名和想要的键名完全一致,可以用compact快速生成关联数组,代码更简洁:

public function getDetails($id) { 
    $instrument = Instruments::join('revisions', 'revisions.id', '=', 'instruments.revisions_id') 
        ->orderBy('instruments.name') 
        ->first(); 
    $teams = Team::join('instruments', 'teams.instruments_id', '=', 'instruments.id') 
        ->orderBy('instruments.name') 
        ->get(); 

    // compact会自动根据变量名生成对应键名的数组
    return compact('instrument', 'teams');
}

访问方式和方案1完全一致,非常省心~

内容的提问来源于stack exchange,提问作者Carol.Kar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:28:53