Laravel по-русски

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

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

#1 Re: Laravel 5.x » Связь с ларавель через web socket » 24.04.2018 11:29:21

Тоже занимался когда-то подобным, но не ларавеле и сделал для себя вывод, что лучшим решением было разделение сервера чата и php фреймворка. Просто шарьте сессию через Redis (обязательно с id пользователя) и используйте данные сессии для полноценного чата на ноде. Желательно даже сообщения в отдельную бд писать, но не обязательно. Доступ к бд ларавеля у вас тоже есть со стороны ноды. Нужны какие-то данные? Просто обратитесь к базе и получите их.
По итогу у вас есть Laravel, который отдает фронтенд, который в свою очередь обращается к ноде и дальше работает непосредственно ТОЛЬКО с ней. Однако, нужно быть очень внимательным с окончанием сессий (по времени или вручную).
А если есть какие-либо изменения в Laravel, то через Redis можно отправить тоже событие, которое подхватит нода и дальше по сокетам разошлет.

#2 Re: Laravel 5.x » Перевод контента и связи между таблицами » 24.04.2018 11:10:14

1. Есть

$table->bigInteger('article_id')->unsigned();

2. В схеме есть. В модели оно автоматически с помощью модуля Dimsav\Translatable\Translatable; создано.

$table->foreign('article_id')->references('id')->on('articles')->onDelete('cascade');

3. А вы видите в таблице хоть какие-то поля кроме id? Они перечислены в fillable, чтобы их можно было задавать, но модуль все это дело перемещает в соответствующие переводы. Смотрите на схему таблиц и вы поймете о чем я.
4. А его и нет. Опять же, столбец `locale` в самой таблице есть, остальное на плечах модуля. Он единственный популярный, который я нашел для Laravel.

$table->string('locale')->index();

И по сабжу, с проблемой я в итоге разобрался, надо было делать как-то так:

Article::with('translations.user')->paginate(10)

А потом для каждого отдельного обращаться к юзеру вот так:

$someArticle->translate()->user

#3 Laravel 5.x » Перевод контента и связи между таблицами » 23.04.2018 17:15:10

Iworb
Ответов: 3

Собственно, есть модель новостей `Article`, у неё есть таблица переводов, в которой по сути вся информация находится (`user_id`, `slug`, `title`, `description`, `body` и даты).
Как получить список новостей с привязкой к языку и с автором новости.
Вот так выглядят миграции и модели:

Schema::create('articles', function (Blueprint $table) {
    $table->bigIncrements('id');
});
Schema::create('article_translations', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->bigInteger('article_id')->unsigned();
    $table->integer('user_id')->unsigned();
    $table->string('slug')->unique();
    $table->text('title');
    $table->text('description');
    $table->text('body');
    $table->string('locale')->index();
    $table->timestamps();
    $table->softDeletes();
    $table->unique(['article_id','locale']);
    $table->foreign('article_id')->references('id')->on('articles')->onDelete('cascade');
    $table->foreign('user_id')->references('id')->on('users')->onDelete('restrict');
});
DB::statement('ALTER TABLE article_translations ADD FULLTEXT full(title, description, body)');
// app\Article.php
<?php

namespace App;

use Dimsav\Translatable\Translatable;
use Illuminate\Database\Eloquent\Model;

class Article extends Model {

	use Translatable;

	public $timestamps = false;

	public $translatedAttributes = [
		'user_id',
		'title',
		'slug',
		'description',
		'body',
		'created_at',
		'updated_at',
		'deleted_at'
	];

	protected $fillable = ['user_id', 'title', 'slug', 'description', 'body'];
}
// app\ArticleTranslation.php
<?php

namespace App;

use App\User;
use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Model;

class ArticleTranslation extends Model {

	use Sluggable;
	use FullTextSearch;

	protected $fillable = ['title', 'slug', 'description', 'body'];
	protected $searchable = ['title', 'description', 'body'];

	/**
	 * Return the sluggable configuration array for this model.
	 *
	 * @return array
	 */
	public function sluggable() {
		return [
			'slug' => [
				'source'    => 'title',
				'maxLength' => 255
			]
		];
	}

	public function user() {
		return $this->belongsTo(User::class, 'user_id');
	}
}

Здесь находится приложение полностью.

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