These are chat archives for LaravelRUS/chat

13th
Dec 2014
Maxim
@Big-Shark
Dec 13 2014 03:59
видать шел
@SCIF ты тут?
Alexander Zhuravlev
@SCIF
Dec 13 2014 03:59
Тут
Maxim
@Big-Shark
Dec 13 2014 04:00
@SCIF если что пиши в личку или сюда, хенгаут отказалс заводится на компе.
Alexander Zhuravlev
@SCIF
Dec 13 2014 04:00
Угумс :)
Maxim
@Big-Shark
Dec 13 2014 04:01
а разве он(имя подключения) не должно возвращать копию модели только с другой указаной бд?
Alexander Zhuravlev
@SCIF
Dec 13 2014 04:02
@Big-Shark , апи говорит, что Builder должен возвращаться
Maxim
@Big-Shark
Dec 13 2014 04:02
странно, в этом и ошибка по идеи должно модель вернуть
Alexander Zhuravlev
@SCIF
Dec 13 2014 04:03
Не все методы модели возвращают модель
Maxim
@Big-Shark
Dec 13 2014 04:04
а билдер создает ивенты на удаление и прочее?
не все, но тут нам нужна эта же модель, только с другим подключение, разве нет?
Alexander Zhuravlev
@SCIF
Dec 13 2014 04:04
Надо полагать, что нет, раз он ругался
Maxim
@Big-Shark
Dec 13 2014 04:05
просто билдер может другие ивенты выдавать, и нужно слушать сразу 2 ивента, от модели и от билдера
Alexander Zhuravlev
@SCIF
Dec 13 2014 04:05
static Builder query()
Begin querying the model.
static Builder on(string $connection = null)
Begin querying the model on a given connection.
Документировано так как и работает. Вопрос логичности конечно страдает, но там везде бардак то модель/коллекция, то запрос. А если поработать с eloquentBuilder'ом то там и до обычного builder'а можно допрыгаться
Получается, что нет удобного способа работать с моделями через другое соединие временно. Только на постоянку через $connection
Maxim
@Big-Shark
Dec 13 2014 04:09
ну то что добраться можно это наоборот хорошо, но то что не всегда логично, это плохо. ну чисто теоретически, я думаю не сложно переписать метод он на возвврат модели и другого соеденения, главное чтобы не было статичных переменных, но я думаю их быть не должно.
Скинь плиз ссылку на гитхабе на элоквоент модель, я посмотрю как это можно сделать не сложно)
Maxim
@Big-Shark
Dec 13 2014 04:22
собственно все элементарно)
Denis
@DenchikBY
Dec 13 2014 09:00
хотел положить код записи реферера в базу в RouteServiceProvider в boot метод, но почему-то запись происходила от 2 до 5 раз за 1 запрос, в AppService Provider то же самое, почему так может быть?
Orel
@2byte
Dec 13 2014 09:18
@DenchikBY хром ?
Orel
@2byte
Dec 13 2014 09:24
@DenchikBY можешь лог записать query string, хром делает запросы в поисках favicon, и не важно что в html она не вызывается.
Denis
@DenchikBY
Dec 13 2014 09:31
@2byte хм, favicon в html прописан
Orel
@2byte
Dec 13 2014 09:31
@DenchikBY пиши лог, он может разные фав искать
Denis
@DenchikBY
Dec 13 2014 09:49
@2byte спасибо за идею, позаписывал запросы и дошло, что у меня выполняются еще запросы на капчу, отсутствующие изображения, так что оставлю в конструкторе контроллера, как сейчас есть
Orel
@2byte
Dec 13 2014 10:03
Не пользовался одним своим приложением на ларе давно, вот сейчас запускаю ошибка, заглядываю а тут https://yadi.sk/i/c4cKcTeYdLwbn
Brezhnev Ivan
@vanchelo
Dec 13 2014 11:55
@2byte кто это так жестко прикалолся?
Orel
@2byte
Dec 13 2014 14:40
@vanchelo Не знаю, редактор наверное )
Brezhnev Ivan
@vanchelo
Dec 13 2014 14:46
у меня редактор не такой веселый)))
Orel
@2byte
Dec 13 2014 15:00
Так в шторме делал)
Brezhnev Ivan
@vanchelo
Dec 13 2014 15:01
=)
Orel
@2byte
Dec 13 2014 15:01
Пойду бахну )
Brezhnev Ivan
@vanchelo
Dec 13 2014 15:01
давай)
Denis
@DenchikBY
Dec 13 2014 15:32
public function newQuery()
{
    $query = parent::newQuery();
    if (in_array(str_replace(__NAMESPACE__.'\\', '', get_class($this)), ['Images', 'Albums'])) {
        if (static::$byPrivate) {
            if (!\Auth::check()) {
                $query = $query->where('private', '!=', 1);
            } elseif (!\Auth::user()->isAdmin()) {
                $query = $query->where(function (Builder $query) {
                    return $query->where('private', '!=', 1)->orWhere('user_id', '=', \Auth::id());
                });
            }
        } else {
            static::$byPrivate = true;
        }
    }
    return $query;
}

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

                $query = $query->where(function (Builder $query) {
                    return $query->where('private', '!=', 1)->orWhere('user_id', '=', \Auth::id());
                });

при загрузке долго думает, потом останавливается и отдает пустую страницу, посмотрел внутренности и мне кажется что оно зацикливается. что посоветуете?

Brezhnev Ivan
@vanchelo
Dec 13 2014 15:39
а че ты не используешь Global Scope?
твой метод выглядит не очень привлекательно
и переопределять сторонние методы рекомендуется только в крайних случаях, если другого выхода нет
Denis
@DenchikBY
Dec 13 2014 15:54
@vanchelo этот способ показался как-то проще, без лишних файлов с классами...
может тут можно как-то исправить? а то мало ли переделаю под scope, а он тоже зациклится...
Denis
@DenchikBY
Dec 13 2014 16:39
<?php namespace App\Models;

use Illuminate\Database\Eloquent\ScopeInterface;
use Illuminate\Database\Eloquent\Builder;

class PrivateScope implements ScopeInterface {

    public function apply(Builder $builder)
    {
        if (!\Auth::check()) {
            $builder->where('private', '!=', 1);
        } elseif (!\Auth::user()->isAdmin()) {
            $builder->where(function (Builder $query) {
                $query->where('private', '!=', 1)->orWhere('user_id', '=', \Auth::id());
            });
        }
    }

    public function remove(Builder $builder)
    {
    }
}

переделал в глобал скоуп и как и думал тоже зациклилось

$builder->where(function (Builder $query) {
                $query->where('private', '!=', 1)->orWhere('user_id', '=', \Auth::id());
            });

ему не нравится именно этот кусок, который должен сгенерировать например

and (private != 1 or user_id = 2)
Brezhnev Ivan
@vanchelo
Dec 13 2014 16:40
поля есть в базе?
Denis
@DenchikBY
Dec 13 2014 16:45
@vanchelo конечно есть. во внутренностях посмотрел и как понял, Closure этот для группировки опять вызывает newQuery(), тот в свою очередь этот скоуп и так до бесконечности... может есть другой способ сгруппировать условия?
Brezhnev Ivan
@vanchelo
Dec 13 2014 16:45
а зачем ты группируешь?
в этом нет смысла
мускуль уберет твои скобки
это не пхп
Alexander Zhuravlev
@SCIF
Dec 13 2014 16:47

@vanchelo , ээээм. Ну у него ведь есть и другие условия, правда?

WHERE  parent_id=2 AND (private!=1 or user_id=2)
WHERE  parent_id=2 AND private!=1 or user_id=2

Что-то подсказывает, что запросы не эквивалентны

@vanchelo, или ты про то, что скоуп сам будет обёрнут в скобки??
Denis
@DenchikBY
Dec 13 2014 16:51
естественно есть, для каждого запроса свои условия, а эти в скобках моделью подставляются дополнительно во все запросы
Brezhnev Ivan
@vanchelo
Dec 13 2014 16:51
@SCIF эквивалентны будут
проверь!
Denis
@DenchikBY
Dec 13 2014 16:52
хреново, что на ларе 5 пока не могу воспользоваться дебагтулом, так приходится гадать
Alexander Zhuravlev
@SCIF
Dec 13 2014 16:53
@vanchelo , прямо sql-эквивалентны? Я догадываюсь, что элоквент сгенерирует одинаковый код, но если просто sql, что-то как-то дико выглядит опускание этих скобок. Завтра протестирую
Brezhnev Ivan
@vanchelo
Dec 13 2014 16:53
sql эквивалентны)
проверил, разные результаты
SELECT count(*) FROM `products` WHERE (available != 1 or waiting != 1) and category = 1

1133

SELECT count(*) FROM `products` WHERE available != 1 or waiting != 1 and category = 1

3728

влияют значит
был не прав
Denis
@DenchikBY
Dec 13 2014 17:01
с одним разобрались)
Brezhnev Ivan
@vanchelo
Dec 13 2014 17:01
=)
Denis
@DenchikBY
Dec 13 2014 17:01
теперь проблему с билдером бы решить)
Brezhnev Ivan
@vanchelo
Dec 13 2014 17:02
сделай в билдере remove
Denis
@DenchikBY
Dec 13 2014 17:02
а смысл?
Brezhnev Ivan
@vanchelo
Dec 13 2014 17:03
рекурсию убрать
newQueryWithoutScopes
removeGlobalScopes
хз как правильно поступить, я бы потестил разные варинаты
вообще скоуп к билдеру один раз применяется
на этапе создания его экземпляра
поэтому у тебя где-то в другом косяк
Denis
@DenchikBY
Dec 13 2014 17:12
ну а в чем другом может быть косяк, если этот кусочек убираю и все работает без нареканий, а с ним ложится
Brezhnev Ivan
@vanchelo
Dec 13 2014 17:17
какая ошибка?
Denis
@DenchikBY
Dec 13 2014 17:22
никакой, пустой экран
Brezhnev Ivan
@vanchelo
Dec 13 2014 17:22
debug => true?
Denis
@DenchikBY
Dec 13 2014 17:25
да
Brezhnev Ivan
@vanchelo
Dec 13 2014 17:25
а запрос проходит?
Denis
@DenchikBY
Dec 13 2014 17:28
нет, дальше запроса не идет
Denis
@DenchikBY
Dec 13 2014 17:44
да видимо где-то мой косяк, что оно рекурсивно вызывается :(
отключил трейт, протестил запрос, работает
var_dump(Images::orderBy('views', 'DESC')->limit(100)->where(function ($query) {
            $query->where('private', '!=', 1)->orWhere('user_id', '=', \Auth::id());
        })->toSql());exit;
Brezhnev Ivan
@vanchelo
Dec 13 2014 17:46
в ларике есть функция хелпер dd($value);
делает то же самое что и var_dump($value);die;
Denis
@DenchikBY
Dec 13 2014 17:47
знаю, но постоянно забываю)) уже рефлекс быстро var_dump и exit набирать
Brezhnev Ivan
@vanchelo
Dec 13 2014 17:47
ясно)
Denis
@DenchikBY
Dec 13 2014 17:48
так что, я так понял remove надо прописать?
Brezhnev Ivan
@vanchelo
Dec 13 2014 17:48
не, где-то косяк, а у тебя лара 5?
Denis
@DenchikBY
Dec 13 2014 17:49
угу
Brezhnev Ivan
@vanchelo
Dec 13 2014 17:49
тогда сложно будет помочь) могли что-то поменять со скоупами
я 5-ку еще не ставил
Denis
@DenchikBY
Dec 13 2014 17:50
скоро релиз, можно уже ставить, много интересностей, мне очень понравилась)
вот видимо и придется счас опять внутренности копать чтоб понять в чем дело
Brezhnev Ivan
@vanchelo
Dec 13 2014 17:51
мне 4-ки пока более чем
Роман Сохарев
@greabock
Dec 13 2014 17:52
Простите мне мой слоупок: короче если два оператора в выражении имеют один и тот же приоритет, то они выполняются в порядке слева направо. Известный факт же. Ну это, что касается sql. А вот в php есть, помимо прочего, еще и ассоциативная направленность операторов... хотя, если пользоваться скобочками во всех атомарных выражениях, то о направленности операторов задумываться не и не придется.
Denis
@DenchikBY
Dec 13 2014 17:59
уряяяяяяяяяяяя
получилось, мое решение крайне трививиальное)
$model::$byPrivate = false;
                $builder->where(function (Builder $query) {
                    $query->where('private', '!=', 1)->orWhere('user_id', '=', \Auth::id());
                });
перед группой добавил $model::$byPrivate = false; чтобы ко внутреннему запросу не применяло скоуп, сработало
Brezhnev Ivan
@vanchelo
Dec 13 2014 18:02
и больше ничего не создавал нигде?
Denis
@DenchikBY
Dec 13 2014 18:05

не) этого хватило, у меня в начале скоупа проверка

$model = $builder->getModel();
        if ($model::$byPrivate) {

для первого запроса она тру, а для внутреннего фолс, так что для внутреннего скоуп просто пропустится

Orel
@2byte
Dec 13 2014 18:49
Какой сервер можно поставить на винду с пхп 5.4 ?
Brezhnev Ivan
@vanchelo
Dec 13 2014 18:49
?
xampp?
Orel
@2byte
Dec 13 2014 18:50
apache ,php
Brezhnev Ivan
@vanchelo
Dec 13 2014 18:52
а тебе что нужно?
Orel
@2byte
Dec 13 2014 18:53
Ну ап запустить
Brezhnev Ivan
@vanchelo
Dec 13 2014 18:53
ап?
Arman
@Armanio
Dec 13 2014 18:57
Парни, привет!
Brezhnev Ivan
@vanchelo
Dec 13 2014 18:57
Привет
Arman
@Armanio
Dec 13 2014 18:57
Кто что использует для управления ассетами?
И используете ли для этого что-то?
https://github.com/CodeSleeve/asset-pipeline всякие такие штуки юзаете
Orel
@2byte
Dec 13 2014 18:58
@vanchelo блин что так много вопросов, типа denwer`а
Brezhnev Ivan
@vanchelo
Dec 13 2014 18:58
xampp
Orel
@2byte
Dec 13 2014 18:58
спс
Brezhnev Ivan
@vanchelo
Dec 13 2014 18:58
я юзаю gulp + bower
Arman
@Armanio
Dec 13 2014 19:01
но ведь гулп - это чисто сборка, а бовер - это подтягивание
а в самом проекте как подключаешь и тд?
вручную все?
Brezhnev Ivan
@vanchelo
Dec 13 2014 19:06
в проекте script.min.js styles.min.css
а вообще надо юзать assets)
Arman
@Armanio
Dec 13 2014 19:07
то есть особо не управляешь ими, я тебя понял :)
вот-вот, я и хочу сделать по науке
Brezhnev Ivan
@vanchelo
Dec 13 2014 19:07
Arman
@Armanio
Dec 13 2014 19:08
подрубил assets-pipeline - хвалят все его
Brezhnev Ivan
@vanchelo
Dec 13 2014 19:08
@SerafimArts у нас в чатике есть) можно будет спросить)
Arman
@Armanio
Dec 13 2014 19:09
смотрю его либу, вроде бодро выглядит
Brezhnev Ivan
@vanchelo
Dec 13 2014 19:10
ага
Arman
@Armanio
Dec 13 2014 19:11
а что делать с картинками и шрифтами?
Brezhnev Ivan
@vanchelo
Dec 13 2014 19:11
а что с картинками не так?
Arman
@Armanio
Dec 13 2014 19:12
если закинуть их рядом с скриптами и стилями, они будут доступны по assets/images/image.jpg?
Brezhnev Ivan
@vanchelo
Dec 13 2014 19:12
хз
Arman
@Armanio
Dec 13 2014 19:14
сейчас потестю
Arman
@Armanio
Dec 13 2014 21:26
@SerafimArts прием!