Laravel 9 -排序多态关系

jmo0nnb3  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(135)

我有给定的表结构:

// table: examples
+ -- + ---- +
| id | name |
+ -- + ---- +
| 1  | Test |
| 2  | Test |
+ -- + ---- +

// table: example_data
+ -- + --------------- + ------------------ + --- + ----------------- +
| id | example_data_id | exmaple_data_type  | key         | value     |
+ -- + --------------- + ------------------ + ------------|---------- +
| 1  | 1               | App\Models\Example | external    | 1         |
| 2  | 1               | App\Models\Example | otherKey    | string    |
| 3  | 2               | App\Models\Example | external    | 0         |
+ -- + --------------- + ------------------ + ----------- + --------- +
// Example Model:
public function daten()
    {
        return $this->morphMany(ExampleData::class, 'example_data');
    }

// ExampleData Model:
 public function example_data()
    {
        return $this->morphTo();
    }

如何在key ="external"的情况下按"example_data"中的"value"对示例进行排序?

$examples = Example::with('daten')
                    ->orderBy(***value from external in daten***)  // something like this 'Example->daten->key="external" ==> orderBy Example->daten->value'
                    ->paginate($request->total);

orderBy和callback可以实现吗?回调效果如何?

vmdwslir

vmdwslir1#

这是否回答了您的问题:

$examples = Example::with(['daten' => function($query) {
        $query->orderBy('key', 'asc');
    }])
    ->paginate($request->total);

这将按升序对key列进行排序。如果只需要key等于external的记录,可以执行以下操作:

$examples = Example::with(['daten' => function($query) {
        $query->where('key', 'external');
        $query->orderBy('value', 'desc');
    }])
    ->paginate($request->total);

并按value列排序。

相关问题