Laravel по-русски

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

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

#1 Re: Laravel 5.x » belongsto по нескольким полям » 09.04.2020 10:52:01

Разобрался, можно сделать как я описал выше несколько отношений и вызывать их вот так:

user::with('paramsSex','paramsStatus','paramsDrinks')

#2 Laravel 5.x » belongsto по нескольким полям » 09.04.2020 10:22:45

usver
Ответов: 1

Для примера, имеются две таблицы users и params

Таблица users
id
params_status - foreign_key
params_sex - foreign_key
params_drinks - foreign_key

Таблица params
id - primary_key
name

Мне нужно получить ч/з отношение с помощью ленивой загрузки данные, вот как я делаю:

В модели users
  public function params()
  {
    return $this->belongsTo(params::class,'params_status');
  }
В контроллере
$listing = user::with('params')

Все отрабатывает, НО мне нужно получить одним запросом все параметры по всем полям params_status, params_sex и params_drinks
Можно сделать вот так:

В модели users
  public function paramsStatus()
  {
    return $this->belongsTo(params::class,'params_status');
  }
  public function paramsSex()
  {
    return $this->belongsTo(params::class,'params_sex');
  }
  public function paramsDrinks()
  {
    return $this->belongsTo(params::class,'params_drinks');
  }
И потом их вызывать в контроллере, но это увеличение запросов к БД, да и мне кажется не по феншую.

Гулешь не помог, ответа нигде не смог найти, вот пишу сюда.

#3 Laravel 5.x » Laravel отношения или обычные запросы с LEFT JOIN? » 13.12.2019 05:07:12

usver
Ответов: 2

Друзья, помогите мне инфу в голове по полочкам правильно уложить.
Я честно вам скажу, не могу понять чем лучше отношения от обычных запросов
Вот пример, есть у меня 3 таблицы:

payment_services
  id
  type_object_id
  object_id
  type_service_id

type_objects
  id
  name
  translit

type_services
  id
  name
  translit

где type_object_id - внешний ключ таблицы type_objects, type_service_id - внешний ключ таблицы type_service

Мне нужно получить коллекцию в которой будут поля

payment_services->object_id
type_objects->translit

с условием type_services.translit='hot'


Если делать простым запросом то вот

SELECT * 
FROM payment_services 
LEFT JOIN type_objects ON type_objects.id = payment_services.type_object_id
LEFT JOIN type_services ON type_services.id = payment_services.type_service_id
WHERE type_services.translit='hot'

На выходе я получу все необходимые мне данные с избытком.

Вот, что у меня получилось сделать с отношениями:

class paymentService extends Model
{
  public static function ads()
  {
    typeService::where('translit', 'hot')->first()->actualAdsPayments();
  }
}

class typeService extends Model
{
  public function actualAdsPayments()
  {
    return typeService::hasManyThrough('App\paymentService','App\typeService','id')  
  }
}

Здесь я получу не все данные, в частности я не получу type_objects->translit, вот что у меня получается на выходе

#original: array:9 [▼
        "id" => 3
        "type_object_id" => 3
        "object_id" => 1592148
        "type_service_id" => 3
        "period" => 7
        "price" => "50.00"
        "updated_at" => "2019-12-12 14:59:31"
        "created_at" => "2019-12-11 22:20:42"
        "laravel_through_key" => 3
      ]

поля: price, period, updated_at, created_at из таблицы payment_services, в начале их не стал описывать как не значащие.

По правилам ORM мне все нужно делать ч/з отношения, но я хоть убей не понимаю зачем? Если обычный запрос для меня куда понятней и проще, да и ч/з отношения я не получаю все необходимые мне поля.
Даже если если взять классику, "один автор и много книг", зачем мне отношения, если я все смогу сделать одним запросом с операторам LEFT JOIN
Только сразу к доке не отсылайте, читал ее на несколько раз, но так и не понял нужности отношений ((

#4 Re: Laravel 5.x » Как подключить удаленную БД » 13.06.2019 07:31:58

Да, подключение к хостингу ч/з SSH

При подключении ч/з MySQL Workbench в поле SSH Hostname я указывал 11.22.33.44:1122 (ip и порт это для примера)
В поле MySQL Hostname я указал 127.0.0.1
В поле MySQL Server Port я указал 3336

Если конечно это поможет ответить на мой вопрос.

#5 Laravel 5.x » Как подключить удаленную БД » 13.06.2019 05:53:07

usver
Ответов: 3

Мне нужно на локальной машине подключить удаленную БД к фреймворку Laravel
Проблема в том, что хостинг на котором находится БД подключен к нестандартному порту например 1122, а сама база находится на порту 3336
Вот так выглядит подключение к удаленной БД в файле database.php:
        'mysql' => [
            'driver' => 'mysql',
            'host' => '11.22.33.44:1122',
            'port' => '3336',
            'database' => 'mybd',
            'username' => 'root',
            'password' => 'pass',
            'unix_socket' => '',
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => null,
        ],
Если проверить подключение к этой БД по вышеуказанным настройкам, то выдаст вот такую ошибку: SQLSTATE[HY000] [2006] MySQL server has gone away

Вопросы:
1. Правильно ли я выполнил подключение к БД?
2. Данная ошибка связанна с долгим подключением к БД или фреймворк тупо не достучался до БД ?

Буду благодарен всем кто ответит по существу!

#6 Laravel 5.x » Какие варианты Spinx-а вы знаете » 15.01.2019 12:09:14

usver
Ответов: 5

Хочу прикрутить у себя на сайте поисковую систему Sphinx и вот хочу спросить кто какие плагины использовал для Laravel 5
вот мне попался этот https://github.com/sngrl/sphinxsearch

Как вы считаете остановиться на нем или может есть более лучшие разработки?

#7 Re: Laravel 5.x » Авторизация ajax » 24.12.2018 05:46:53

Разобрался сам.
Проблема была в dump
Закоментил dump все стало работать roll

#8 Laravel 5.x » Авторизация ajax » 22.12.2018 09:37:49

usver
Ответов: 1

Делаю авторизацию с помощью ajax

    public function login(Request $request){  
        $credentials = $request->only('email', 'password');
        Auth::attempt($credentials,true);    
        dump(Auth::check());
        return;
    }    

авторизация проходит, вот эта строчка

dump(Auth::check());

возвращает true

НО когда обновляю страницу F5 авторизованного пользователя нет.
Подскажите, почему не сохраняется авторизация после перезагрузки страницы.

#9 Re: Веб-разработка » SQL сортировка » 30.11.2018 12:40:36

Друзья, я разобрался. Сортировка мне нужна и на самом деле все очень просто

order by table.town=$town DESC, table.region=$region DESC, table.fed=$fed DESC `table`.`id` desc

#10 Веб-разработка » SQL сортировка » 30.11.2018 11:41:30

usver
Ответов: 1

Таблица содержит записи (объявления) относящиеся к разным городам, областям и федеральным округам

Сайт определил по Гео, что пользователь с такого то города, мне нужно:
1. Вывести сначала записи для этого города, далее области к которой относится данный город, далее к фед. округу к которой относится данный город, если нет для определенного города, то см. п.2
2. Если нет для определенного города, то ввести для региона к которому относится данный город, далее к фед. округу к которому относится данный город, если нет для региона, то см. п.3
3. Если нет для области, то выводим для фед. области к которому относится данный город, если нет то см. п.4
4. Выводим все объявления без привязки к Гео, с сортировкой по дате добавления.

Ну и еще в добавок все запросы отсортировать на убывание по дате добавления объявлений.

Сначала я думал что мне поможет сортировка по 3-ем полям, но нет, это не то.
Как вариант делать разные запросы и как то объединять их, но загвостка в том, что запрос типа ->paginate(), т.е. он формирует мне данные для пагинации, соответственно два или три разных запроса как я понимаю мне не подходят.

Буду сильно признателен за помощь.

#11 Laravel 5.x » SQL инъекции » 29.11.2018 10:19:12

usver
Ответов: 1

запрос к БД

mymodel::select('id')->where('lit','=',$lit)->get();

где $lit - это строка из браузера, в ней может быть любая строка.
Гарантирует ли меня такой запрос от SQL инъекций? Или правильнее сказать, защитит ли меня Laravel от SQL инъекций?

З.Ы.
данным запросом я проверяю правильность составного url типа mysaite.ru/marka/model/page.html
В $lit может содержать /mark/ или /моdel/ 
нужно ли мне переменную $lit как то дополнительно обрабатывать или Laravel сам определит есть там инъекция или нет?

#12 Laravel 5.x » ЧПУ взять параметры из url и передать в контроллер » 17.11.2018 14:53:46

usver
Ответов: 2

есть ЧПУ такого вида
http://localhost/reviews/ford
нужно взять второй параметр [ford] и передать в контроллер для соответствующей обработки.
я так понимаю это нужно делать в роутинге, вот у меня там такая строка:

Route::paginate('reviews/{mark?}', ['as' => 'reviews','uses' =>'ReviewsController@listReviews']);

Вопрос, каким образом мне там получить 2-ой параметр [ford] и передать в контроллер?

#13 Re: Laravel » Уменьшить кол-во запросов к БД » 16.11.2018 09:27:09

select towns.id, count(*) as total from towns left join offers on towns.id = offers.town_id group by towns.id order by total desc

Спасибо!

#14 Laravel » Уменьшить кол-во запросов к БД » 14.11.2018 10:56:38

usver
Ответов: 2

Есть таблица объявлений offer с привязкой к городам.
Нужно вывести кол-во объявлений (число) с привязкой к городам.
Собсно делаю так:
1. получаю список городов из таблицы town
2. запускаю цикл по offer

select count(*) as total from offer where town_id = id города

Получаю тысячу таких запросов для каждого города (печалька), подскажите пожалуйста как мне уменьшить кол-во запросов?

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