合并多个Eloquent模型保持最新模型,但用其他模型填充空白属性

时间:2018-03-23 13:25:09

标签: laravel laravel-5 eloquent laravel-eloquent

让我们说我有3个Eloquent模型,我想合并到一个模型。

最新的模型应该是基本模型,我想用其他两个模型的(可能的)数据填充空白属性。

所以:

5 | 2018-03-22 | John Doe  | Earth    | Hawai         | Beer  | Dog

结果:

foreach($question as $ques) {
    foreach($ques->registration_type as $regType) {
        $optional[$ques->id][$regType->id] = 1;

        if($regType->pivot->required == 1) {
            $required[$ques->id][$regType->id] = 1;
        }
    }
}

当然我可以循环遍历所有已知属性并遍历每个非最新模型以查看属性是否已设置...

但这听起来有点麻烦;应该有一种更好的方法将这些模型聚合为一个,最新的基础。

1 个答案:

答案 0 :(得分:0)

我能想到的最短的解决方案:

$result = $models->first();
$attributes = ['name', 'location', 'favorite_piza', 'drink', 'pet'];
foreach($attributes as $attribute) {
    $values = $models->pluck($attribute)->filter(function($value) {
        return !is_null($value) && $value !== '';
    });
    $result->$attribute = $values->first();
}

如果您确定数据中可以显示非these values,则可以简化过滤:

$result->$attribute = $models->pluck($attribute)->filter()->first();