Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Не уверен в правильности подсказки, но у самого с подобным было море проблем.
Вью отрабатывает только то, что прописано в шаблоне (в html). То есть, если у тебя в sidebar не прописан вызов getProducts, то оно и не вызовется.
При запущенном расширении срабатывает, так как он для выдачи результата сам делает запрос на срабатывание (ну или что-то такое)
Здравствуйте.
Изучите сперва sql и если не можете написать запрос на laravel, то напишите sql"ьный запрос. За вас работу никто не хочет выполнять, могут только помочь.
select count(article.id) from article
left join users on users.id = article.user_id
where user.id = 666
Так мы получим ТОЛЬКО количество статей конкретного пользователя (666)
В ларавель, не помню как прописывается join, поэтому посылаю тебя сюда https://laravel.ru/docs/v5/queries#%D0% … 0%B8%D1%8F
Проще создать две модели User, Article. У юзера прописать связь
public function articles() {
return $this->hasMany('App\User', 'user_id');
}
Пояснение
https://laravel.ru/docs/v5/eloquent-relationships#om
Получить пользователя со статьями по связи -
$users = User::with('articles')->where('столбец','значение')->get();
// И при выводе количество получаешь так -
foreach($users as $key => $user){
$user->articles->count();
}
Json это же строка. И пока ты его не декодировал, то можешь сохранить в текстовое поле.
Я кстати, по другому делаю. Сохраняю лишь id уведомления/сообщения и когда нужно посмотреть что там с этой платёжкой, то делаю запрос на я.кассу по этому id
Да можешь. Тебе нужно почитать про получение файла из base64.
Если сильно кратко, то вот. Давно было, поэтому много не вспомню.
public function createImage($data){
if(strpos($type,'png')){
$img = imagecreatefrompng($data['path']);
...
// $newImg - потому что нужно было изменить фотку.
// $tmp_link - временное место для хранения данного изображения(опять же "фишка" моей задачи).
imagepng($newImg,$tmp_link);
}elseif(strpos($type,'jpg') || strpos($type,'jpeg')){
$img = imagecreatefromjpeg($data['path']);
...
imagejpeg($newImg,$tmp_link);
}
И я хз как быть с другими типами фоточек. Если нашёл решение, то прошу так же отписать.
Посмотри что у тебя на форме выводится в action, когда ты уже заполняешь форму в браузере.
Проверь вкладку нетворк в отладчике браузера, может там пишется какая то ошибка.
Попробуй файл веб переписать в контроллер ресурсов. Может тут происходит диссонанс у ларавеля.
Да, роуты разные. И при любом из них принимающая функция должна отрабатывать. Но почему первый (tests) возвращает ошибку, а второй (test) входит в принимающую функцию. (урл при изменении роута так же меняю на соответствующий).
Надо бы попробовать другой контроллер проверить с такими же условиями.
>> используй PSR
-__- табы ван лав. . .
Здравствуйте.
Имеется файл с route и соответственно контроллер.
route прописан (route ресурсов прописан первым)
Route::resource('tests', 'TestsController');
Route::get('tests/log/{id}', 'TestsController@getLogId');
В контролере TestsController принимающая функция -
public function getLogId($id) {
// Действия
}
Пишется 404 ошибка.
Если же путь прописать например
Route::get('test/log/{id}', 'TestsController@getLogId');
или
Route::get('log/{id}', 'TestsController@getLogId');
Тогда всё работает.
Хотя например есть через index и его дубль, то всё работает.
Route::get('tests/status/{id}', 'TestsController@index');
Route::post('tests/status/{id}', 'TestsController@postIndex');
Почему такое может происходить?
Проверяй на количество значений в массиве. Если больше 1, то циклом выводить.
Убери три точки перед названием переменной, про которую тебя спросили выше и проверь.
$order = OnOrderType::with('models')->where('address', $onOrderType_address)->orderBy('id', 'desc')->first();
Должно быть так. Попробуй перед условием эту строку прописать и проверить, что ложится в $order.
Здравствуйте.
Проблема / непонятки с построением ексель файлы при записи данных в него.
Сохраняю данные сразу в файл, который имеет расширение xls и открывается экселем (хотя везде пишут что это проблема и нужны библиотеки специальные. Не суть в общем). Созданный файл открываю на винде, кодировка летит. Ексель открывает с кодировкой CP1251 (через онлайн декодер узнал), поэтому перекодирую под винду и всё открывается нормально.
Самый смак в том, что пытаюсь заполнить два столбика, например - фамилия, имя. Строка строится в цикле так - $text .= $value.'; '.$key.';'."\r\n";
При обычных условиях в одну ячейку пишется и фамилия и имя. Если же добавить при записи в файл - fwrite($files, "\xEF\xBB\xBF"); тогда фамилия пишется в один столбец, имя в другой.
Вопрос, почему так? Почитал про эти символы - это либо пробелы, если в середине текста, либо указатели, что файл в кодировке utf-8.
И если кто то писал данные в ексель, то подскажите как нужно было разделить данные по столбцам.
Для примера код, где фамилия и имя разделены по столбцам и новая запись пишется в новой строке -
$text = '';
foreach ($arrayData as $key => $value) {
$text .= $value.'; '.$key.';'."\r\n";
}
$files = fopen($_SERVER['DOCUMENT_ROOT']."/file_text.xls","w+b");
fwrite($files, "\xEF\xBB\xBF");
$text = mb_convert_encoding($text,"windows-1251");
fwrite($files, $text);
fclose ($files);
Ааааа, точно точно. Ступил, скопировав не думая. Каюсь. Править уже не могу сообщение. . .
На сколько я понимая(очень плохо пока в этом всём разбираюсь), js через post должен сам получать разрешение (csrf-token) на переправку данных, а не из формы их брать, как в твоём случае прописанный ключик в ajaxSetup
Ммм нет. Ты не понял, куда вставлять данную проверку.
@if($brands->count() === 0)
@foreach($brands as $brand)
<tr>
<td>
{{$brand->alias}}
</td>
<td>
{{$brand->description}}
</td>
<td>
{$brand->meta_title}}--}}
</td>
. . .
@else
{{$title}}
@endif
То есть сперва проверка на переменную, а потом уже код, который использует эту переменную.
Во первых, код из файлов можно было подчистить, чтобы пустые функции не светились. Места меньше - читать проще.
Во вторых, проверял ли, что выводится из Auth::user() ? Есть ли там значение unreadNotifications. Попробуй \Auth::user(). По моему ещё есть конструкция \Auth::user()->find($user_id)
Может я скажу что то совсем простое иии тупое или глупое, но ведь логично, что такое количество в выборке. Тебе нужно продумать саму выборку, как бы ты на чистом sql выбирал. Просто сперва получаешь таблицу версий, к каждой внутренней записи цепляешь энное количество записей из таблицы групп, в свою очередь к её записям ещё и продуктов записи, а к продуктам поля. . . Ну это перебор. Быть может джойны тут спасут.
Ахаххх, хорошо быть мёртвым. Не нужно впахивать как живой
Есть таблица продуктов. В неё ложатся данные из . . .пока трёх таблиц. У неё два идентифицирующие поля, показывающих из какой таблицы товар - entity_type и entity_id. На странице выводятся данные товары из данной таблицы. Сейчас же, задача не просто выводить, а подсчитать сколько однотипного товара емеется и вывести его всего лишь раз с цифрой, обозначающей количество.
Например есть три игрушки - машинки, самолётики и корабли - для каждого типа своя таблица. Если раньше на странице выводилось.
Например - машинка белая, машинка чёрная, самолётик синий, самолётик красный, корабль жёлтый, корабль радужный.
Теперь должно вывести - машинка без разницы цвет, количество машинок. Самолётик без разницы цвет, количество самолётиков. Кораблик аналогично.
Ну, у меня до сих пор нет приличного опыта в этом и я не вижу конкретной "неправильности" в отмене "правильности"
Решено, я имел ввиду - стала понятна ошибка, почему нельзя вывести все поля, а группировать только по некоторым.
Вот именно тут мне придётся часть функционала выборки из sql перенести на php, так как на sql я не могу выбрать всё, сортируя по двум полям. Придётся выбрать всё, а на пхп подсчитать схожие записи.
Это понятно и я не говорю всё менять. Так, на будущее, если не знал.:) Я тут сильно экспериментировал с запросами и открыл для себя, что иногда два запроса лучше одного, а Eloquent сам может разделить одну конструкцию на несколько запросов.
Кароооче. Твой запрос перенести мне слабо, но можно попробовать написать несколько запросов.
Это всё понятно.
Под словами "все поля занести в group bу", это значит, что бы запрос прошёл и ошибка не высветилась. Естественно, что мне левые поля не нужны в group by. Прямой запрос в БД проходит на ура, а вот через ларавель не выходит каменный цветок.
Судя твоему примеру - сгруппируем мы по возрасту, а имя и зарплата будут дублироваться. Ну и пусть, они же не уникальные. Главное что не будет дублей в колонке возраста, а имя или зарплата будет подставлено первое попавшееся значение из сгруппированных строк, по идее. Но это опять же в рамках допустимого, так как не уникальные поля.
П.С. А, всё понятно, всё решено. Для нуждающихся -
https://laracasts.com/discuss/channels/ … ot-working
Здравствуйте.
Есть запрос
Product::where('', '')
->select(\DB::raw('COUNT(*) AS counts, file_id, file_name'))
->groupBy('file_id','file_name')->orderBy('created_at', 'desc')->get();
Если вот так, то всё хорошо. Если же мне нужны все поля в выборке, то
Ни так
->select(\DB::raw('COUNT(*) AS counts, product.*'))
Ни так не работает.
->select(\DB::raw('COUNT(*) AS counts, перечисление_всех_полей'))
И выходит ошибка
Syntax error or access violation: 1055 'БД.product.id' isn't in GROUP BY
То есть что бы все поля вывести, мне их нужно все заталкать в groupBy. Как быть, что делать, что бы получить все поля, но группировать лишь по двум?
Сложные у тебя запросы. Честно, с джойнами почти не работаю. Их заменяют такие функции как has, with, whereHas , подробнее например -
http://www.itmathrepetitor.ru/laravel-5 … -wherehas/
Правда результат и его обработка будет чуток отличной, зато код понятнее и меньше. А иногда и быстрее.
В кратце - что бы написать конструкцию типа Сontainer::with('weight', 'container_run')->where('id',1)->get(); Нужно что бы в модели Сontainer, которая работает по таблице container, была прописана связь (один к одному, один ко многим) к таблицам weight и container_run, которые так же имеют свои модели. Подробнее - https://laravel.ru/docs/v5/eloquent#%D0 … 0%B8%D1%8F
А вот джойнить чёт у меня не получается
После сбора данных в контролере ты же отправляешь какие то данные во вьюшку? Как то она у тебя строится ведь.
Если нет, в первые это делаешь, тогда так -
public function showAvto($id1, $id2){
// Магия тут
...
.....
return view('папка_в_каталоге_views.файл_в_папке_которая_в_каталоге_views', ['имя_переменной_которое_получаешь_в_файл_в_папке_которая_в_каталоге_views' => $переменная_которая_получена_в_этом_контроллере] );
}
В догонку
http://laravel.su/docs/5.2/views
Может тоже плюсом будут -
$this->builder->where(function($q){
$arrId = Table2::where('title', 'нужный')->pluck('связующее поле таблицы 2');
$q->whereNotIn('связующее поле таблицы 1',$arrId);
})
Если через джойны
$this->builder->leftJoin('table2', 'связующее поле таблицы 2', '=', 'связующее поле таблицы 1')->where(function($q){
$q->whereNull( table2.id )->OrWhere('table2.title', '!=', 'нужный');
});
Вопрос. Если менеджер уже имеет связь с клиентами, то почему у него нельзя вывести всё тоже самое, что и у клиента?
Ну, то есть если клиенту ты сразу выводишь цену, скидку, то у менеджеру ты сперва даёшь выбрать клиента, а когда он выбирает, то запускаешь ту же функцию вывода цены, скидки что и для клиента.