Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 03.07.2018 15:33:55

Как получить коллекцию моделей вместо билдера?

Доброго времени суток!
Вывожу инфу по табличке "Часы". и на месте этого же вывода, по кнопке, хочу отображать только те часы, что были отмечены "В избрандное".
Проблема в следующем:
Если использую просто выборку часов

$clocks_list = clock::select(DB::raw('id, brand, name, type, price'));

то все ок. можно получить коллекцию моделей и юзать методы из модели..
а если вот так:

$likes = DB::table('clocks')->Join('likes', 'clocks.id', '=', 'likes.clock_id')->where('user_id', '=', Auth::user()->id);

то полуачю уже Builder и цикл с использованием методов из модели уже не работает. т.к. вместо модели там массив

{#1290 ▼
  +"id": 62
  +"brand": "NoName"
  +"name": "234"
  +"price": 234
  +"text": "234"
  +"comment": "234"
  +"type": "Мужские"
  +"status": 0
  +"created_at": "2018-06-27 10:41:31"
  +"updated_at": "2018-06-27 10:41:31"
  +"user_id": 1
  +"clock_id": 91
}

и весь код перелопачивать и все равно возникают с этим связанные проблемы.. Можно ли както получить сразу нормальную коллекцию только избранного товара текущего пользователя ?

Не в сети

#2 04.07.2018 08:40:28

Re: Как получить коллекцию моделей вместо билдера?

Привет.
Если ты хочешь пойти по правильному и хорошему пути: тебе нужно использовать модели. И тогда нужно будет прописать связи между ними.
А в данном случае - попробуй get()
Но в принципе, использовать вместо модели с Laravel фасад DB - плохая практика

Не в сети

#3 05.07.2018 17:12:20

Re: Как получить коллекцию моделей вместо билдера?

Решение)

в юзере отношение
        public function likedClocks(){
        return $this->belongsToMany(Clock::class, 'likes', 'user_id', 'clock_id');
    }

и далее уже юзаем
        $tt = User::all()->where('id','=', Auth::user()->id);
        foreach ($tt as $clo) {
            dd($clo->likedClocks);
        }

Не в сети

#4 06.07.2018 11:57:13

Re: Как получить коллекцию моделей вместо билдера?

Пагинация отношений, если кому надо:

    public function getOptionsPaginatedAttribute()
    {
        return $this->likedClocks()->paginate(10);
    }

а вызов вот такой!!

->options_paginated;

источник: https://stackoverrun.com/ru/q/6993429/l … 1%8F%D1%85

Не в сети

#5 10.07.2018 16:48:42

Re: Как получить коллекцию моделей вместо билдера?

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

public function likedClocks(){
  return $this->belongsToMany(Clock::class, 'likes', 'user_id', 'clock_id');
}

Не в сети

Подвал раздела