Laravel по-русски

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

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

#1 Re: Laravel 4 » Сложные запросы с JOIN » 18.01.2015 15:56:22

Wide пишет:

Нет, судя по вашему запросу.

dialogs - это сообщения чата. Имя выбрано не совсем удачно. Одно сообщение принадлежит одному пользователю. Разве не One To One?
Я не пытаюсь выбрать все сообщения одного пользователя. Напротив, пытаюсь узнать `username` оставившего сообщение.
Поправьте, пожалуйста, если не прав.


mysql> describe users;
+-----------------+------------------+------+-----+---------------------+----------------+
| Field           | Type             | Null | Key | Default             | Extra          |
+-----------------+------------------+------+-----+---------------------+----------------+
| id              | int(10) unsigned | NO   | PRI | NULL                | auto_increment |
| email           | varchar(255)     | NO   | UNI | NULL                |                |
| username        | varchar(16)      | NO   | UNI | NULL                |                |
| password        | varchar(60)      | NO   |     | NULL                |                |
| joined_at       | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| remember_token  | varchar(100)     | YES  |     | NULL                |                |
| validation_code | varchar(255)     | YES  |     | NULL                |                |
| status          | tinyint(4)       | NO   |     | NULL                |                |
+-----------------+------------------+------+-----+---------------------+----------------+
mysql> describe dialogs;
+------------+------------------+------+-----+---------------------+----------------+
| Field      | Type             | Null | Key | Default             | Extra          |
+------------+------------------+------+-----+---------------------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL                | auto_increment |
| user_id    | int(10) unsigned | NO   |     | NULL                |                |
| date       | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| is_deleted | tinyint(1)       | NO   |     | NULL                |                |
| message    | text             | NO   |     | NULL                |                |
+------------+------------------+------+-----+---------------------+----------------+

На выходе нужна вот такая конструкция:

mysql> select dialogs.id, users.username, dialogs.date, dialogs.message from dialogs left join users on dialogs.user_id = users.id and dialogs.is_deleted = 0 order by dialogs.id desc limit 10;
+----+-------------+---------------------+------------------------------------------+
| id | username    | date                | message                                  |
+----+-------------+---------------------+------------------------------------------+
| 68 | ElForastero | 2015-01-17 15:30:35 | Здесь был Юлий!!!!!!                 |
| 67 | ElForastero | 2015-01-17 15:30:20 | Привет, мир!                             |
| 66 | ElForastero | 2015-01-17 15:29:57 | 22rewrwrewaewrawer                       |
| 65 | ElForastero | 2015-01-17 15:29:48 | 22rewrw                                  |
| 64 | ElForastero | 2015-01-17 15:29:37 | 22                                       |
| 63 | ElForastero | 2015-01-17 15:27:14 | 11111                                    |
| 62 | ElForastero | 2015-01-17 15:26:49 | qwqwqwqwww                               |
| 61 | ElForastero | 2015-01-17 15:26:32 | qwqwqwq                                  |
| 60 | ElForastero | 2015-01-17 15:26:05 | qwr2                                     |
| 59 | ElForastero | 2015-01-17 15:25:29 | qwe1                                     |
+----+-------------+---------------------+------------------------------------------+

#2 Re: Laravel 4 » Сложные запросы с JOIN » 18.01.2015 12:25:20

Потому что используете Eloquent. В вашем случае можно использовать отношения One To Many http://laravel.com/docs/4.2/eloquent#relationships

Скорее One To One. Это что-то вроде общего чата.

#3 Laravel 4 » Сложные запросы с JOIN » 17.01.2015 17:50:30

ElForastero
Ответов: 6

Здравствуйте. Подсобите с составлением запроса.
Каков порядок условий при использовании Join'ов?

Попытался составить нечто похоже на это, но на выхлопе получается объект.

 $messages = Dialog::orderBy('dialogs.id', 'desc')->where('is_deleted', '=', 0)->leftJoin('users', function($join) {
            $join->on('dialogs.user_id', '=', 'users.id');
        })->select('dialogs.id', 'dialogs.message', 'dialogs.date', 'users.username')->take(20)->get();

Объект с кучей свойств, в т.ч. настройками конкретной модели и пр.

object(Illuminate\Database\Eloquent\Collection)#172 (1) { ["items":protected]=> array(1) { [0]=> object(Dialog)#159 (21) { ["timestamps"]=> bool(false) ["fillable":protected]=...

P.S. Выборка элементарная.
2 таблицы: users и dialogs. Требуется выбрать последние 10 сообщений из таблицы dialogs, и имя пользователя из таблицы users. В dialogs есть ключ user_id.

#5 Re: Laravel 4 » if (Auth::check()) глючит... » 09.01.2015 13:06:41

Ну, ответ один: авторизация не проходит. hmm

#6 Laravel 4 » Password Confirmation не проходит » 06.01.2015 13:39:24

ElForastero
Ответов: 0

Всем бобра, товарищи.
Сие есть баг, или фича?

The password confirmation confirmation does not match.

array(5) {
  ["_token"]=>
  string(40) "Msc0Cxe4vIVTEdHBhEukbaOhWogRRzOqNytbKVzR"
  ["email"]=>
  string(16) "example@mail.com"
  ["username"]=>
  string(9) "Confucius"
  ["password"]=>
  string(9) "qwerty123"
  ["password_confirmation"]=>
  string(9) "qwerty123"
}

UPD: Вопрос снимается. Я правило "confirmed" добавил к полю "password_confirmation", а не к "password", как положено. Отсюда и непонятки.

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