gpt4 book ai didi

Laravel 资源 - 如何检查给定值是否存在?

转载 作者:行者123 更新时间:2023-12-04 17:15:18 25 4
gpt4 key购买 nike

我正在使用 laravel 资源来获取 api 的数据:

        return [
'id' => $this->id,
'unread' => $this->unread,
'contact' => UserResource::collection($this->users),
];

这工作正常。问题是“用户”为空时。我的意思是 - 并非每次我的 Controller 从我的关系中加载用户时:
    $offers = Offer::where('user_id', $user_id)->orderBy('created_at','desc')->get();
foreach ($offers as $offer)
{
$offer->setRelation('users', $offer->users->unique());
}
return OfferShortResource::collection($offers);

有时 - 这种关系不存在。但不是关系是问题,因为 - 我的资源没有加载关系 - relatin 被加载到 Controller 中。

那么如何向资源添加某种逻辑呢? - 基本上告诉 - users 属性可能不存在 - 那么不要在这里加载数据,甚至 - 不要检查 $this->users关系

编辑:我试图让它像这样:
 use Illuminate\Support\Arr;
...

'contact' => $this->when(Arr::exists($this, 'users'), function () {
return UserResource::collection($this->users);
}),

但这总是错误的

编辑 2:Offer 模型中的关系
 public function users(){
return $this->belongsToMany(User::class, 'messages', 'offer_id', 'from')
->where('users.id', '!=', auth()->user()->id);

最佳答案

尝试使用 whereHas :

Offer::whereHas('users', function ($query) use ($user_id) {
$query->where('user_id', $user_id);
})->orderByDesc('created_at')->get();

optional helper 可用于访问可能未定义的属性:
optional($this->user)->name
when方法应该适合您,请尝试以下操作:
'contact' => $this->when(property_exists($this, 'users'), function () {
return UserResource::collection($this->users);
}),

还可以尝试:
isset($this->users)

关于Laravel 资源 - 如何检查给定值是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51179995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com