Laravel Eloquent 关系从其他关系中获取一列 table
Laravel Eloquent Relationship get one column from other table
我有关于 Laravel Eloquent 的问题。
我有以下 tables
Users
-id
-email
Money
-id
-user_id
-amount
-total
用户有很多钱
我想使用 $user->current_money
然后我想得到最后一笔钱的总数
我需要这个因为我想在 table
中显示所有用户当前的钱
@foreach($users as $user)
<tr>
<td>{{$user->email}}</td>
<td>{{$user->current_money}}</td>
</td>
@endforeach
有什么好的做法吗?
谢谢
我喜欢在 Laravel Eloquent 中使用追加来实现这一点。
在您的用户模型中添加 $appends 数组。像这样
protected $appends = ['current_money'];
这将在用户模型中查找方法 getCurrentMoneyAttribute()
。它应该看起来像这样。
public function getCurrentMoneyAttribute()
{
return 0.00;
}
这意味着您已经植入了 User 表和 Money 表之间的关系。你的方法应该是这样的,
public function getCurrentMoneyAttribute()
{
return $this->money()->latest()->first()->total;
}
以及何时调用 $user->current_money
laravel 执行查询,它将获得与该用户相关的 Money 的最后一行。
您可以使用您所询问的 Eloquent 关系和单个查询来完成此操作。使用 append 是一个滑坡,因为现在它会将其添加到所有用户查询中,并且随着应用程序的增长可能会导致膨胀。除了追加之外,它将有 2 个查询而不是一个查询。
在用户模型中,您可以这样定义关系:
/**
* Get money for a user
*/
public function money()
{
return $this->hasMany('App\Money', 'user_id', 'id');
}
然后你可以在单个查询中像这样查询用户的性能:
$user = User::where('id', $id)->with(['money'])->first();
或
$user = User::with('money')->findOrFail($id);
或者现在您也可以预加载钱,因为现在在用户模型中定义了关系。
$user = Auth::user(); // or however you are pulling the user from the DB.
$user->money;
然后遍历不同的货币。
我有关于 Laravel Eloquent 的问题。
我有以下 tables
Users
-id
-email
Money
-id
-user_id
-amount
-total
用户有很多钱
我想使用 $user->current_money 然后我想得到最后一笔钱的总数
我需要这个因为我想在 table
中显示所有用户当前的钱@foreach($users as $user)
<tr>
<td>{{$user->email}}</td>
<td>{{$user->current_money}}</td>
</td>
@endforeach
有什么好的做法吗?
谢谢
我喜欢在 Laravel Eloquent 中使用追加来实现这一点。
在您的用户模型中添加 $appends 数组。像这样
protected $appends = ['current_money'];
这将在用户模型中查找方法 getCurrentMoneyAttribute()
。它应该看起来像这样。
public function getCurrentMoneyAttribute()
{
return 0.00;
}
这意味着您已经植入了 User 表和 Money 表之间的关系。你的方法应该是这样的,
public function getCurrentMoneyAttribute()
{
return $this->money()->latest()->first()->total;
}
以及何时调用 $user->current_money
laravel 执行查询,它将获得与该用户相关的 Money 的最后一行。
您可以使用您所询问的 Eloquent 关系和单个查询来完成此操作。使用 append 是一个滑坡,因为现在它会将其添加到所有用户查询中,并且随着应用程序的增长可能会导致膨胀。除了追加之外,它将有 2 个查询而不是一个查询。
在用户模型中,您可以这样定义关系:
/**
* Get money for a user
*/
public function money()
{
return $this->hasMany('App\Money', 'user_id', 'id');
}
然后你可以在单个查询中像这样查询用户的性能:
$user = User::where('id', $id)->with(['money'])->first();
或
$user = User::with('money')->findOrFail($id);
或者现在您也可以预加载钱,因为现在在用户模型中定义了关系。
$user = Auth::user(); // or however you are pulling the user from the DB.
$user->money;
然后遍历不同的货币。