Laravel 5.7为每个孩子获得所有兄弟姐妹

时间:2018-12-04 06:22:07

标签: laravel model eloquent

我想知道如何获得孩子在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);
}

仅使用belongsTohasMany函数,是否有可能?

抱歉,我的英语不好,所以我不知道它叫什么,所以我可以在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 :(得分:0)

您可以通过2种方式完成此操作。

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();

}