#laravel
#laravel
Вопрос:
я хочу удалить некоторые сообщения, которые имеют определенное значение ограничения, сообщения имеют 2 типа (исполнители и песни), песни принадлежат исполнителям
я получаю песни исполнителя с помощью приведенного ниже кода, но когда я использую функцию where для удаления некоторых песен, она не работает, и появляется ошибка
Ошибка :
explode() ожидает, что параметр 2 будет строкой, объект задан
Мой код
$rel = collect([]);
foreach ($post->artists as $artist) {
$artist_posts = $artist->getPosts->where(function ($query) {
$query->whereNotIn('restrict', ['res1'])->orWhereNull('restrict');
})->sortbydesc('id');
$rel = $rel->concat($artist_posts->where('type', $type));
}
$col = $rel->unique('id');
Post.php (модель)
...
public function getPosts()
{
return $this->belongsToMany(Post::class, 'artists_posts', 'artist_id', 'post_id')->with('artists');
}
...
Комментарии:
1. что такое
$type
? кроме того, почему вы передаете замыкание вwhere
… этоCollection@where
не конструктор запросовwhere
2. Я предполагаю, что метод отношений, который вы показываете
Artist
, неPost
включен?
Ответ №1:
Вы не можете передать закрытие where
методу of IlluminateSupportCollection
. Вы вызываете не конструктор запросов where
, а коллекцию.
/**
* Filter items by the given key value pair.
*
* @param string $key
* @param mixed $operator
* @param mixed $value
* @return static
*/
public function where($key, $operator = null, $value = null)
Если вы хотите вызвать where
конструктор запросов для выполнения запроса к базе данных, вам придется использовать фактический метод отношения, а не динамическое свойство:
$artist_posts = $artist->getPosts()->where(function ($query) {
^^
Тогда вам нужно будет настроить sortbydesc
orderByDesc(...)
, и вам нужно будет вызвать get
конструктор, чтобы получить коллекцию результатов.