Laravel по-русски

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

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

#1 Re: Laravel 5.x » выбрать записи которых нет » 29.08.2019 17:26:18

Попробуйте как вариант "сырые" запросы, в которых можете использовать OUTER JOIN (LEFT / RIGHT JOIN). Вообще в SQL вы можете вкладывать запрос в запрос, т.е. извлечь что-то одно, а потом добавить с помощью INNER JOIN или OUTER JOIN, или вообще SELECT из другого SELECT (даже SELECT из одного и того же присвоив копии псевдоним с помощью AS).

в теории запросов SQL я хорошо понимаю и там простор для ума) но в данном случае уже все организовано через Builber так. поэтому встал вопрос как встроить эту выборку. спасибо Вам за отклик. мой вариант работает тоже

#2 Re: Laravel 5.x » выбрать записи которых нет » 28.08.2019 17:14:33

$query->where('title', '=', 'нужный')  и $query->where('title', 'нужный'); - результат аналогичныйВопрос былили там есть какие угодно, кроме title='нужный''!=" - это и есть "кроме"

вопрос был
как выбрать те записи из 1 таблицы, у которых этой связи нет (т.е. совсем нет никаких связей в связующей таблице или там есть какие угодно, кроме title='нужный'). 2 условия

#3 Re: Laravel 5.x » выбрать записи которых нет » 28.08.2019 17:08:26

$this->builder->whereHas('2 таблица', function ($query) {
            $query->where('title', '!=', 'нужный');
        });

это было бы слишком просто) в Вашем примере выберутся только связанные записи, у которых нет ссылки на title='нужный', а не связанные записи не попадут в выборку вообще.

в общем вроде я нашла ответ.

$this->builder->whereDoesntHave('2 таблица', function($query) {
            $query->where('title', '=', 'нужный');
});

но могу ошибаться)
был еще вариант сделать ->doesntHave и ->orWhereHas, но тогда следующие условия ->where уже плохо проходят при динамическом формировании моего запроса) получается что идет and ...or и выборка ломается.
Если кто понимает чуть больше в таких запросах, подскажите

#4 Laravel 5.x » выбрать записи которых нет » 28.08.2019 16:26:56

Yuliya
Ответов: 7

Подскажите, всю голову сломала) есть 2 модели и связь многие ко многим (3 таблицы соответственно). знаю как выбрать из связанной таблицы запись определенную по типу

$this->builder->whereHas('2 таблица', function ($query) {
            $query->where('title', 'нужный');
        });

но не могу понять как выбрать те записи из 1 таблицы, у которых этой связи нет (т.е. совсем нет никаких связей в связующей таблице или там есть какие угодно, кроме title='нужный')
заранее спасибо

#5 Re: Laravel 5.x » преобразователи в модели » 03.04.2019 17:03:53

Спасибо Вам большое за советы!) буду экранировать при выводе значит

#6 Re: Laravel 5.x » преобразователи в модели » 03.04.2019 17:00:12

Если надо избежать инъекции тегов при выводе страницы, шаблонизатор это сделает за вас. По умолчанию теги экранируются

шаблонизатор это делает. но у меня REST API и тогда получается, мне придется на фронт стороне это делать ручными методами

#7 Re: Laravel 5.x » преобразователи в модели » 03.04.2019 16:55:51

То есть можно описать кастинг, но конкретно делать htmlspecialchars перед записью в базу это плохая практика. Это костыль. Когда вам понадобится получить непреобразованное значение, будете строит новый косталь на костыле.

а что вы тогда можете посоветовать, чтобы избежать сохранения нежелательных тегов?

#8 Re: Laravel 5.x » преобразователи в модели » 03.04.2019 16:15:10

Возможно. Делайте по этому же образцу.

так это я знаю, что можно прописать для каждого

public function setTitleAttribute($value)
    {
        $this->attributes['title'] = htmlspecialchars($value);
    }

и в таком духе дальше)
у меня вопрос, нельзя ли это как-то объединить в одно? для всех полей или указать для каких именно? функционал то одинаковый

#9 Laravel 5.x » преобразователи в модели » 03.04.2019 10:36:47

Yuliya
Ответов: 12

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

public function setTextAttribute($value)
    {
        $this->attributes['text'] = htmlspecialchars($value);
    }

только для поля text, а чтобы тоже самое выполнялось и еще для некоторых полей модели? (title, description и тд)

#10 Laravel 5.x » дата в ларавел из БД » 13.03.2019 17:40:43

Yuliya
Ответов: 2

Товарищи, подскажите в чем суть или как сделать лучше? в таблицах mysql дата хранится как datetime. я вытаскиваю например всю коллекцию

$this->site->get();

и если у меня была нечаянно дата как 0000-00-00 00:00:00(перенеслась так из очень сатрой базы), то ларавел возвращает ее как

"created_at": "-0001-11-30 00:00:00"

у меня АПИ которое дальше кидает это все на фронт
почему так происходит и как этого можно избежать? пусть бы и оставляло нулевые все..

#11 Re: Laravel 5.x » laravel сотртировка » 12.02.2019 11:32:45

Явно или неявно вы будете использовать join, раз нужна связанная таблица.

а можно ли как-то его использовать с минимальными потерями?) при его использовании ведь явно указываются названия таблиц (а хотелось бы оперировать именно моделями), в фильтрации придется добавлять тоже имена таблицы, т к id и даты будут неопределенными...

#12 Laravel 5.x » laravel сотртировка » 12.02.2019 10:59:50

Yuliya
Ответов: 4

Имеется 2 модели связанные 1 к 1 (hasOne) и соответственно работа через Eloquent ORM.

return $this->1модель->with('2модель')->get();

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

#13 Laravel 5.x » Модель по-умолчанию » 03.08.2018 12:39:41

Yuliya
Ответов: 0

Коллеги, может кто знает как решить такой вопрос.
Хочу взять модели по отношению 1 к 1. возможны случаи, когда у модели не будет отношения и вторая модель придет null. могу ли я взять ее по умолчанию как экземпляр пустой модели?
Знаю что у версии 5,4 появился метод

->withDefault()

, но по документации он работает на отношение

->belongsTo

. А я хочу взять что-то типа

$this->hasOne('...', 'id')->withDefault();

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

#14 Laravel 5.x » получить связанную модель даже если она null » 02.05.2018 17:34:38

Yuliya
Ответов: 0

Подскажите, есть ли в Ларавел возможность получить связанные модели, даже если связи нет (одна из них null)?
Например есть таблица Users и Users_info и во второй таблице необязательно есть информация по конкретному пользователю. но они связаны 1 к 1. я хочу получить на выходе одним массивом json информацию из двух таблиц,даже если во второй нет записи, но чтобы она была в массиве с этими же полями, как будто запись есть) а не null. т е чтобы ответ был по структуре всегда одинаков.

public function get($id)
{
      $response = [
        'user' => $this->user_service->getUser($id)
    ];
     return response()->json($response, 200);
}
public function getUser($id)
    {
        return $this->user->with('user_info')
            ->where('id', $id)
            ->get()
            ->first();
    }

#15 Laravel 5.x » связать 2 таблицы » 29.03.2018 13:21:12

Yuliya
Ответов: 1

Ситуация такая. храню в таблице объектов несколько id разных значений, а в другой таблице их характеристики.
Пример. таблица Flat и поля санузел,балкон,тип дома и т.д. Они все имеют список своих значений,которые храню в другой таблице в виде id категория название краткое название.
Необходимо соответственно в выводимом списке  объектов,вывести и их характеристики. не хочу выносить все  значения  в разные таблицы типа Балконы Санузлы и тд,потому что их несметное кол-во)
и вот мой вопрос. как правильно связать эти 2 таблицы,если по сути у Flat несколько внешних ключей получается в зависимости от того,какое значение я хочу взять. может есть какие-то практики с таким подходом или посоветуете как сделать лучше?
хочется обратиться что-то вроде flat->label->id->title и получить название нужно поля вне зависимости от того, хочу я получить балкон или тип дома, у всех значений свой id.

#16 Re: Laravel 5.x » удаление REST по картинке » 23.03.2018 13:24:34

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

#17 Re: Laravel 5.x » удаление REST по картинке » 23.03.2018 12:57:58

Делаешь обычную форму, вместо инпута или кнопки ставишь ссылку, на ссылку вешаешь функцию. Здесь написано, как это делать - http://artkiev.com/blog/link-submit.htm

Большое спасибо!

#18 Laravel 5.x » удаление REST по картинке » 23.03.2018 12:49:18

Yuliya
Ответов: 6

Подскажите, пожалуйста, как можно навесить метод DELETE на resource контроллер на удаление не по кнопке в форме а по картинке?
К примеру есть есть такая конструкция на удаление пользователя.

<a class='btn' href='{{route('user.destroy',['user'=>$user->id])}}'>
   <img src="{{ asset(config('settings.theme')) }}images/delete.jpg" style="cursor:pointer" alt="Удалить" title="Удалить">
</a>

но по ресту метод destroy требует наличия запроса

method_field('DELETE')

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

#19 Re: Laravel 5.x » выборка из связанной таблицы » 19.03.2018 22:37:27

разобраться

спасибо, обязательно посмотрю!

#20 Re: Laravel 5.x » выборка из связанной таблицы » 14.03.2018 21:44:48

напиши конкретно что хочешь сделать и составим точный запрос

хочу во-первых разобраться с хорошими практиками построения приложения сразу)и я уже поняла, что усложняю себе жизнь видимо)
Задача такая, что во-вторых хочу вынести реализации методов из контроллеров. и тут вопрос- выборки лучше тогда где делать, в моделях? или в каких-то других классах? в-третьих задача фильтров. т е на 1 метод будут приходить разные данные по фильтрации, поля в разных таблицах (потому и надо связать условия), фильтры должны накладываться, т.е. я могу выбрать например по логину(таблица user) и по паспортным данным юзера(которые в таблице userInformation).
и тогда у меня вопрос,если не использовать репозитории, то похожие методы-выборки и фильтры других разделов,связанные с другими моделями,тоже нужно реализовывать в их моделях? допустим тут я выбираю всех юзеров, а где-то выбираю все компании модели Company. это будет разная реализация похожи методов в их собственных моделях или где-то еще?))
как могла пояснила))сильно не ругайте!)

#21 Re: Laravel 5.x » выборка из связанной таблицы » 14.03.2018 19:16:47

Вы имеете в виду, что нужно разделить все методы максимально, чтобы они не были привязаны друг к другу и собирать в зависимости от потребностей?по типу вынести отдельно where() и whereHas() и тд и собирать билдер как захочется?
практика это хорошо, но документация не дает таких знаний)) а хочется двигаться в правильную сторону

#22 Re: Laravel 5.x » выборка из связанной таблицы » 14.03.2018 15:52:04

Плохой репозиторий...

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

#23 Re: Laravel 5.x » выборка из связанной таблицы » 14.03.2018 15:41:12

есть join в конструкторах, есть WhereHas() я читала. но не могу привязать это все воедино. и как лучше использовать? join как-то избыточен получается если есть with с отношениями...

#24 Laravel 5.x » выборка из связанной таблицы » 14.03.2018 13:21:47

Yuliya
Ответов: 10

делаю отношение моделей через Eloquent ORM.
Допустим есть 2 модели юзеры и информация о них (2 разные таблицы)
делаю жадную загрузку по принципу

public function getUsers($where = null)
    {
        return $this->user_rep->with('companies', 'userInformation')->all($where);
    }

и все работает прекрасно.

метод all() в репозитории

public function all($where = FALSE, $columns = array('*'))
    {

        $builder = $this->model;
  
        if (is_array($where)) {
             return $builder->where($where)->get($columns);
        }

        return $builder->get($columns);

    }

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

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