Laravel где в массиве - PullRequest
       2

Laravel где в массиве

0 голосов
/ 24 сентября 2018

У меня есть массив коллекций.В коллекциях я имею отношение.Как я могу использовать whereIn в этих отношениях?

$arrayCollections = $category->products;

$arrayCollections = $arrayCollections->character->whereIn('id', [1,2,3,4]); //I need use whereIn in character relation. I get error: Property [character] does not exist on this collection instance.

foreach($arrayCollections as $product) {
    .... //but in foreach I can use $product->character
}

Отношение в модели продукта ::

public function character()
{
    return $this->hasMany('App\Models\ProductCharacter');
}

Ответы [ 5 ]

0 голосов
/ 24 сентября 2018

Вы должны использовать метод whereHas () и метод with ().

$arrayCollections = $category->products()
    ->whereHas('character', function($character){
        $character->whereIn('id' ,  [1,2,3,4]);
    })
    ->with('character')->get();

Это позволит вам получить коллекцию "продуктов", к которым прикреплены "символы", с идентификатором в [12,3,4].

0 голосов
/ 24 сентября 2018

Вы можете попробовать это

$arrayCollections = $category->products()->with('character')->whereIn('id' ,  [1,2,3,4])->get();

foreach($arrayCollections as $product) {}
0 голосов
/ 24 сентября 2018

Вам, кажется, нужны косвенные отношения.Лучший способ получить это - использовать hasManyThrough

В вашей Category модели

public function characters() {
     return $this->hasManyThrough(Character::class, Product::class); // Has many characters through products
}

Тогда вы можете напрямую сделать:

 $characters = $category->characters()->whereIn('id', [ 1, 2, 3, 4 ])->get();
0 голосов
/ 24 сентября 2018

что по этому поводу?Сначала я добавил ():

$characters = $category->products()->first()->character()->whereIn('id', [1,2,3,4])->get();

foreach($characters as $character) {
    // $character
}
0 голосов
/ 24 сентября 2018

Попробуйте это:

$characters = $category->products()->character()->whereIn('id', [1,2,3,4])->get();

foreach($characters as $character) {
    // $character
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...