Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Плиз, расскажите поэтапно, как вы sleeping-owl устанавливали.
Установил нулевой laravel5, как в мануале.
Потом наслоил sleeping-owl, как показано здесь: http://laravel.su/docs/sleepingowl_admin/installation
При заходе на http://mysite.ua/admin пишет:
InvalidArgumentException in Route.php line 583:
Routing requirement for "adminModel" cannot be empty.
Что делать и почему?
Тот же вопрос об удалёнке.
Если убрать из конструкции
->having('count', '=', count($parameters))
то и лишний знак вопроса в конце запроса пропадает.
Причём даже если ->having(\DB::raw('`count` = ' . count($parameters))) - знак вопроса всё равно добавляется.
Что за ошибка и почему?
$query = \DB::table(\DB::raw('(' .$query->toSql() . ') t'))
->select(\DB::raw('t.*, count(t.id) count'))
->groupBy('t.id')
->having('count', '=', count($parameters));
->get();
Долго не мог понять, почему путаются парметры и ставятся не в той последовательности, в которой стоят знаки вопроса. Даже менял все выражения на Raw. Сейчас дошло озарение, что лишний параметр ларавел добавляет как раз для вставки $query->toSql(). И знак вопроса, даже если всё заменить на Raw, одиноко красуется в конце запроса, а параметр для него не находится.
Поэтому снова вопрос, как этот долбаный селект вставлять синтаксически правильно. Я почти у цели.
Как в ларавел вложить один селект в другой?
Зачем? Два раза нужно group by делать.
$query2->groupBy('products.id', 'parameters.id')->toSql();
$query = \DB::table(\DB::raw('(' .$query2 . ') as t'))
->select(\DB::raw('count(*) as count, *'))
->groupBy('id')
->having('count', '=', count($parameters))
->get();
На это мне справедливо пишет:
Object of class Illuminate\Database\Eloquent\Builder could not be converted to string
А как и чем слепить их?
Нужно так:
select *, count(*) as count from ($query2 as t) ...
... или на манер:
select count(third) as thirdcount, product_id
from (select count(lala) as count, * from t group by lala having count=3) as t2
group by thirdcount
В общем, вижу, что сырые запросы или набор их в строку будет легче при сложных выборках.
Например, выбрать продукты одной категории (многие ко многим), имеющим параметрами цвета красный или жёлтый, размеры 42, 43, 44, фирмы Адидас или Найк.
Как синтаксически правильно вставить один селект в другой?
$query = \DB::('t')->select('id')->toSql();
Потом можно ли это вставить в другой запрос, наподобие:
$rows = \DB::table('fonar')->select('*')->whereIn('fonar_id', $query)->get();
Чтобы два запроса не делать. Нужен аналог одного запроса, но на ларавел:
select * from fonar where fonar_id in (select id from t)
Я имел в виду не переменную, а возможность отменить предыдущий селект и задать новый. Есть такое?
Использую scope c селектом в составе.
В одном месте мне нужно вызвать этот scope с другим селектом.
Можно ли из $query как-то убрать один ->select() и заменить его на другой?
Есть таблица продуктов, есть таблица параметров, есть таблица продукт_параметр.
Херня получается у меня, когда я хочу отобрать продукты, совпадающие с тремя параметрами сразу.
Скажем, синий и детский и спортивный
Как такое решается?
Есть мысль сделать с помощью
select count(products.id) as count...
join ... join ...
where (parameters.id = 1 or parameters.id = 2 or parameters.id = 3)
group by products.id ...
having count=3
(т.е. по трём параметрам совпадает)
Или существует более изящное решение?
Гусары, вольно!
Проблема поиска - это проблема подбора нужных слов.
Параметры в функцию замыкание - волшебные слова.
$query->where(function($query) use($foo, $bar) {
$query->where('field1', $foo)
->whereIn('field2', $bar);
});
________________________________________________
VitalN, всё равно спасибо.
Как передать параметры (переменные) в функцию:
$query->where(function($query) {
$query->where('field1', $foo)
->whereIn('field2', $bar);
});
На function($query, $foo, $bar) отвечает:
Missing argument 2 for App\Product::App\{closure}()
Вставил-таки в routes.php кусок:
Route::group(['middleware' => ['web']], function () {
Route::get('elfinder/ckeditor', '\Barryvdh\Elfinder\ElfinderController@showCKeditor4');
Route::any('elfinder/connector', '\Barryvdh\Elfinder\ElfinderController@showConnector');
});
Теперь раздумьях, как же оно всё-таки работало в прошлом проекте без этого?
Или barryvdh что-то изменил?
Скопировал с прошлого проекта заготовку. На сервере всё работало.
Т.е. я не особо помню установку и настройку elfinder (файловый менеджер) на laravel5.
Сейчас при нажатии на кнопочке окно всплывает, но в нём красуется: "Ошибка. Не удалось соединиться с сервером. Сервер не найден".
Она же: "Error Unable to connect to backend".
При поиске обнаружил кучу советов о путях и разрешениях.
Пути? В прошлом проекте всё работает без насилия над routes.php
Разрешения поставил 0777 на всё.
Кто в теме - может быть такое, что для работы elfinder нужен какой-то модуль php, недоустановленный у меня?
Нубский вопрос, но на что указывает эта ошибка Elfinder?
Так и делаю.
Но надеялся, что есть более изящный способ.
Как сделать такое:
$_SESSION['cart'][$i]['amount'] += $amount;
, но с объектом laravel5 \Session ?
Прошу прощения. Сам дурак.
public function scopeChoiceProducts($query, $id, $parameters) { ... }
self::choiceProducts($id, $parameters);
Есть scope:
public function scopeChoiceProducts($id, $parameters) { ... }
Есть вызов:
self::choiceProducts($id, $parameters);
Передаю вторым параметром массив. Внутри метода он становится строкой "1".
Какого?
В смысле?
return redirect($url, 301);
?
Какой код перенаправления у структуры return redirect($url)?
301 или иной?
Как задать длину индекса при создании строкового индекса?
В mysql это: KEY `address6` (`address`(6)),
Что нам даёт Laravel5, кроме $table->index('address') ?
Route::group(['middleware' => 'auth', 'prefix'=>'message'], function() {
...
});
Есть два типа зарегистрированных существ таблице users. Поле is_admin : 0 или 1.
Допустим, я хочу ать доступ к /message только зарегитсрированным. Код выше работает.
Как мне теперь сделать доступ к /admin только юзерам с is_admin=1?
Пример: модуль Pingpong
Делаю модель User наследником \Pingpong\Admin\Entities\User
Добавляю в таблицу базы и в модель нужное лишнее поле.
А в config/auth.php меняю взад "'model' => Pingpong\Admin\Entities\User::class" на "'model' => App\User::class"
Но с контроллерами и вьюхами как быть?
На пальцах объясните, плиз.