php - 如何通过条件使用“with”laravel 关系函数来获取数据?
问题描述
这是我的桌子=> 桌子图片
//This is my controller
public function listUserStripeActionableRequests(Request $request) {
return $model = UserRequest::whereNull('deleted_at')
->with('oldPackage')
->get();
}
userRequest.php
public function oldPackage() {
return $this->hasOne(Package::class, 'id', 'old_package_id');
}
如果 package_type == 1,我需要根据表中的 package_type 获取数据,然后我需要从 Package::class 获取数据,如果 package_type == 2 然后从 AddOnsPackage::class 获取数据,然后模型函数如下:-
$this->hasOne(AddOnsPackage::class, 'id', 'old_package_id');
我如何使用单个查询来相应地获取数据?
解决方案
你可以试试
class UserRequest extends Model
{
public function package()
{
return $this->hasOne(Package::class, 'id', 'old_package_id');
}
public function addon()
{
return $this->hasOne(AddonPackage::class, 'type', 'add_on_type');
}
public static function sorted()
{
return static::whereNull('deleted_at')
->get()
->map(function ($record) {
if ($record->package_type === 1) {
$record->load('package');
} elseif ($record->package_type === 2) {
$record->load('addon');
}
return $record;
});
}
}
然后在控制器中你可以做
public function listUserStripeActionableRequests(Request $request)
{
return $model = UserRequest::sorted();
}
推荐阅读
- go - 使用 kafka 消费者渠道和上下文的 Go 例程
- outlook - 以编程方式将 LDAP 帐户添加到 MS Outlook
- android - 显示软键盘时如何隐藏页脚按钮?
- c++ - 基于 Chromium Edge 的 WebView2 不起作用
- c++ - MPI_Reduce 是否也做 MPI_Barrier 的工作?
- kotlin - 当参数之一是可变参数时,KCallable 在 Kotlin 中不起作用
- unit-testing - 如何在 zuulProxy 中使用 zuul 路由过滤器测试重定向的路由
- django - Forbidden 403 CSRF 验证失败。请求中止。drf
- python - 如何从字符串中删除一个字符(python)
- bash - 外壳搜索“
*" 不工作