У меня есть Post
модель, как это:1055 Expression # 3 отборных списка не в GROUP BY ошибка в операторе отношения Laravel ManyToMany 5,3
class Post extends Model
{
protected $primaryKey = 'post_id';
public function tags()
{
return $this->belongsToMany('App\Tag');
}
}
и Tag
Модель:
class Tag extends Model
{
public function posts()
{
return $this->belongsToMany('App\Post');
}
public function tagsCount()
{
return $this->belongsToMany('App\Post')
->selectRaw('count(pt_id) as count')
->groupBy('tag_id');
}
public function getTagsCountAttribute()
{
if (! array_key_exists('tagsCount', $this->relations)) $this->load('tagsCount');
$related = $this->getRelation('tagsCount')->first();
return ($related) ? $related->count : 0;
}
}
(pt_id
столбец является полем первичного ключа в post_tag
сводная таблица).
Как вы видите, есть ManyToMany соотношение между Post
и Tag
моделей.
Для учета связанных тегов определенного сообщения, я добавил tagsCount()
и getTagsCountAttribute()
методов для Tag
Модель.
Теперь предположим, что я хочу получить теги граф определенного сообщение, как это:
$post = Post::find($post_id)->get();
return $post->tagsCount
Он работал для меня в Laravel 5.2 (и более ранних версий), но после обновления до Laravel 5.3, ниже показана ошибка:
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'aids.post_tag.post_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by (SQL: select count(pt_id) as count, `post_tag`.`tag_id` as `pivot_tag_id`, `post_tag`.`post_id` as `pivot_post_id` from `posts` inner join `post_tag` on `posts`.`post_id` = `post_tag`.`post_id` where `post_tag`.`tag_id` in (145) and `posts`.`deleted_at` is null group by `post_tag`.`tag_id`)
Что такое проблема и как я могу ее решить?
Я использую ту же версию mysql для laravel 5.2 и 5.3.but, эта проблема возникает только в 5.3. –
Это решило мою проблему. Благодарю. – rotaercz