Laravel 与参数有很多关系

问题描述 投票:0回答:2

我在用户模型和朋友模型之间有关系

用户.php

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

该关系实际上返回用户和朋友之间的外键列(user_id)等于当前用户的id的所有记录,但我还想返回当前用户的id位于朋友表中另一列中的记录,该列的名称是friend_id,这这是我的尝试

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

它实际上没有返回正确的记录

laravel eloquent
2个回答
0
投票

我认为没有直接的方法,但你可以尝试建立 2 个关系并将它们合并为一个关系

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

public function additionalfriends() {
    return $this->hasMany(Friend::class, 'friend_id');
}

public function allfreinds() {
    return $this->friends->merge($this->additionalfriends);
}

您可以尝试的另一个解决方案是

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

0
投票

用这个

// 用户模型

 public function tasks(){
    return $this->hasMany(TaskUser::class,'user_id','id')->latest();
}

//用户任务模型

public function task(){
    return $this->belongsTo(Task::class,'task_id','id');
}

//控制器

$user = User::with(['tasks' => function ($query) {
            $query->with('task');
        }])->find(auth('api')->id());
        return $this->successResponse(data:
        TaskResource::collection($user->tasks->pluck('task')->where('dueDate',"2021-09-07")),
            message:'Success',code:200
        );

希望有用

© www.soinside.com 2019 - 2024. All rights reserved.