我正在使用带有MySQL后端的Larave 4.2。
我有两张表有很多关系如下:
users : id(PK), name
videos : id(PK), user_id(FK), title, file_size
我希望为每个用户获取视频大小的总和,因此我创建了如下关系:
class User extends Eloquent{
protected $table = 'users';
public function videosSize() {
return $this->hasOne('Video')
->selectRaw('user_id, sum(file_size) as videosSize')
->groupBy('user_id');
}
public function getVideosSizeAttribute() {
// if relation is not loaded already, let's do it first
if ( ! array_key_exists('videosSize', $this->relations))
$this->load('videosSize');
$related = $this->getRelation('videosSize')->first();
// then return the count directly
return ($related) ? (int) $related->videosSize : 0;
}
}
我正在使用它:
$user = User::with('videosSize')->get();
它返回如下数组:
Array
(
[0] => Array
(
[id] => 18
[name] => abc
[videos_size] => Array
(
[user_id] => 18
[videosSize] => 8731801
)
)
[1] => Array
(
[id] => 19
[name] => abc
[videos_size] => Array
(
[user_id] => 19
[videosSize] => 7931881
)
)
.. so on
)
但是,我想得到它:
Array
(
[0] => Array
(
[id] => 18
[name] => abc
[videos_size] => 8731801
)
[1] => Array
(
[id] => 19
[name] => abc
[videos_size] => 7931881
)
.. so on
)
后来我想通过videos_size 排序 。
我不希望对原始查询使用join 语句,因为我在那里with
语句更多User
模型,我不能改变它们,因为有很多东西取决于它返回的嵌套数组。
我该怎么办?