繁体   English   中英

Laravel 关系将列组合为逗号分隔的字符串

[英]Laravel relationship combine column to comma separated string

在我的 Laravel 应用程序中,我有 3 个表,分别称为customerspackagescustomer_packages 我需要用comma separated字符串显示每个客户的每个package

例如:

# | Customer     | Package(s)
------------------------------
1 | Customer - 1 | 123, 456, 789, ...  
2 | Customer - 2 | 456, 789, ...

关系:

customers -> hasMany -> customer_packages -> hasOne -> packages

客户.php

public function customerPackage()
{
    return $this->hasMany(CustomerPackage::class);
}

public function index() 
{
    return self::select([
        'id',
        ...
    ])->with([
        'customerPackage:id,customer_id,package_id,package_amount',
        'customerPackage.package:id,title',
    ])
    ->where("status", \Common::STATUS_ACTIVE)
    ->get();
}

客户包.php

public function customer()
{
    return $this->belongsTo(Customer::class);
}

public function package()
{
    return $this->belongsTo(Package::class);
}

一切正常。 但是,为了获得所需的(逗号分隔)输出,我必须在包上运行循环并生成输出。

像这样的东西:

@foreach($customers as $customer)
    <tr>
        ...
        <td>
            @foreach($customer->customerPackage as $package)
                @php
                    $array[] = $package->package->title;
                @endphp
            @endforeach

            {{ @implode(', ', $array) }}
        </td>
        ...
    </tr>
@endforeach

我希望我解释清楚了..

你可以加入你的表然后使用GROUP_CONCAT得到这样的结果:

 return self::leftJoin('customer_packages','customer_packages.customer_id','customers.id')
        ->leftJoin('packages','packages.id','customer_packages.package_id')
            ->selectRaw("customers.id ,customers.name,GROUP_CONCAT(packages.id SEPARATOR ',') packages")
            ->groupBy(['customers.id','customers.name'])->get();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM