Как передать параметр в модельном отношении Laravel - PullRequest
0 голосов
/ 07 октября 2019

Я создал дерево категорий, и мне нужно передать один параметр в отношение, я не могу передать их.

public function Child()
{
    return $this->hasMany(Category::class, 'parent_id', 'id');
}

, но я хочу использовать переменную для передачи в отношение, похожее на это.

public function Child()
{
    return $this->hasMany(Category::class, 'parent_id', 'id')->where(['owner_id' => $this->ownerId]);
}

тогда я пытаюсь использовать переменную и ничего не получаю, но если я использую жестко закодированное значение, то это работает хорошо. Пожалуйста, помогите

Ответы [ 2 ]

2 голосов
/ 07 октября 2019
$models = App\{YourMainModel}::with(['Child' => function ($query) use ($this) {
    $query->where(['owner_id' => $this->ownerId]);
}])->get();
1 голос
/ 07 октября 2019

Вам нужно будет добавить конструктор к вашей дочерней модели (которая расширяет класс Model).

private ownerId;

public function __construct(int ownerId)
{
    parent::__construct($attributes);

    $this->ownerId = $ownerId;
}

Затем вы можете получить доступ к этому в вашем классе.

public function child()
{
    return $this->hasMany(Category::class, 'parent_id', 'id')->where('owner_id', $this->ownerId);
}

Выбудет делать это, если каждый раз, когда вы захотите создать экземпляр класса Child, вам нужно будет предоставить его владельцу:

$ownerId = 5;
$child = new Child($ownerId);

В качестве альтернативы, вы можете передать параметр непосредственно в эту функцию, откуда бы вы ее ни вызывали, например,:

public function childWithOwner(int $ownerId)
{
    return $this->hasMany(Category::class, 'parent_id', 'id')->where('owner_id', $ownerId);
}

И вы бы назвали это: $this->childWithOwner(4);

В качестве подсказки я бы посоветовал вам начинать имена ваших функций со строчной буквы.

...