Laravel 5.7 получает всех братьев и сестер для каждого ребенка - PullRequest
0 голосов
/ 04 декабря 2018

Интересно, как получить всех братьев и сестер, которые есть у ребенка в модели Laravel?

Я знаю, что могу использовать это $siblings = \App\Child::all()->where('parent_id', $parent_id)->where('id', $id);, чтобы получить всех детей, братьев и сестер, но я хочу знать, могу ли я сделатьдругой путь или более чистый путь?Таким образом, вы можете назвать это в виде лезвия $child->siblings->full_name как-то так.

Но мне интересно, как использовать это как-то так в model.php

public function parent()
{
    return $this->belongsTo(User::class);
}

только с использованиемbelongsTo или hasMany функция может быть, если это возможно?

Извините, я плохо разбираюсь в английском, поэтому я не знаю, как он называется, поэтому я могу искать его в Google.

Редактировать :: Добавление Child.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Carbon\Carbon;

class Child extends Model
{
    protected $guarded = [];

    protected $dates = [
        'birthdate',
        'father_birthdate',
        'mother_birthdate',
        'guardian_birthdate',
    ];

    public function parent()
    {
        return $this->belongsTo(User::class);
    }

    // I want to call this function only using $child->siblings (this one will show all the siblings)
    // without passing the parent id
    // to make it cleaner
    public function siblings($parent_id)
    {
        return $this->all()->where('parent_id', $parent_id);
    }

    public function getAgeAttribute()
    {
        return Carbon::parse($this->attributes['birthdate'])->age;
    }

    public function getFullNameAttribute()
    {
        return $this->attributes['first_name'] . ' ' . $this->attributes['last_name'];
    }
}

1 Ответ

0 голосов
/ 04 декабря 2018

Это можно сделать двумя способами.

1, создав следующий метод:

public function sibling()
{
    return $this->belongsTo(User::class)->where('parent_id', $this->parent_id);
}

2, используя один запрос:

$siblings = \App\Child::where('parent_id', $parent_id)->get();

Надеюсь, этоподсказки

Обновление

Третий способ:

public function scopeSiblings($query, $parent_id) {

    return $query->where('parent_id', $parent_id)->get();

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...