查询函数返回laravel的结果



我有两个模型User和Friend, User在Friend (user_id)中有一个外键,因为它是一个HasMany关系,所以我添加了一个函数,返回当前用户的友谊

public static function searchFriend(){
return Friend::whereUserId(Auth::id())
->orWhere('friend_id',Auth::id())->get();
}

现在我想通过firstname搜索当前用户的朋友,所以我必须通过外键user_id或friend_id和firstname查询他的友谊和对相关用户的访问,我如何才能对searchFriend()函数返回的结果应用查询

$friends = Friend::searchFriend();

添加关系了吗?

public function friends() {
return $this->hasMany(Friend:class);
}

那么你可以简单地做$user->friends()->where(‘first_name’, ‘John’)->get();

try this,

朋友模型:-

public function user(){
return $this->belongsTo('AppUser','user_id');
}
use IlluminateSupportFacadesAuth;
$first_name = $request->first_name ?? "";
$friends =  Friend::whereHas('user',function($q){
$q->where('id',Auth::id());
})->where("first_name","=","%{$first_name}%")->get();

对当前代码库进行最小更改的解决方案是从searchFriend()函数中删除get()调用,并将where语句移动到闭包中(更多信息在这里):

public static function searchFriend(){
return Friend::where(function ($query) {
$query->where('user_id',Auth::id())
->orWhere('friend_id',Auth::id());
}
}

由于"and"结果查询的优先级。点击这里阅读。

像这样使用:$friends = Friend::searchFriend()->where('firstname','John')->get();

这个解决方案应该可以工作,但我建议您将函数更改为如下内容:

User.php

public function friends(){
return Friend::where(function ($query) {
$query->where('user_id',$this->id())
->orWhere('friend_id',$this->id());
}
}

像这样搜索你的名字:$friends = $request->user()->friends()->where('firstname','John')->get()

最新更新