简体   繁体   中英

Laravel eloquent how to get relationships relationship?

I have Users table,Jobs table and JobStatus table. I get user jobs using relationship

return User::find($dto->getUserId())
            ->jobs()

This will return all user jobs as collection, not as relationship inside user model. Now I need to get jobs statuses, but when I try this

User::find($dto->getUserId())
            ->jobs()
            ->statuses()
            

I get error Call to undefined method . I need to get statuses as collection so I can use where,sort by etc while getting them from db. Is there any way to do so?

I need to do something like this, but with statuses

return User::find($dto->getUserId())
            ->jobs()
            ->has('status')
            ->where('role','responsible')
            ->where('jobs.created_at','>=',Carbon::now()->subDays($dto->getPeriod())->toDateString())
            ->get();

To retrieve the jobs by filtering on the statuses relationship, you can do it like this:

$user->jobs()->whereHas('statuses', function ($query) {
    // Perform filter on the query for jobs->statuses
})->get();

For more information about querying relationship existence: https://laravel.com/docs/7.x/eloquent-relationships#querying-relationship-existence


If you want to retrieve the statuses instances, you can do it like this:

$statuses = JobStatus::where('created_at', '>=', now())
    ->whereHas('jobs', function ($query) use ($user) {
        $query->whereUserId($user->id);
    })
    ->get();

Just use jobs without parenthesises to get the model itself:

User::find($dto->getUserId())
            ->jobs
            ->statuses;

define your statuses() function first with the relations in your model with the jobs

like many to many or one to many relationship

public function statuses(){
    return $this->belongsToMany('App\Job')->withTimestamps();
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM