Ich benutze yajra/laravel-datatables und dimsav/laravel-translatable, um eine Tabelle von Rollen zu erstellen.Wie kann ich Eager Loading mit Yajra Datatables und Dimsav verwenden Übersetzen in Laravel 5.2
Die Datentabelle Struktur ist wie folgt. Tabelle Rollen Migration:
Schema::create('roles', function (Blueprint $table) {
$table->increments('id');
$table->softDeletes();
$table->timestamps();
});
Rollen Übersetzungen Tabelle Migration:
Schema::create('role_translations', function (Blueprint $table) {
$table->increments('id');
$table->integer('role_id')->unsigned();
$table->string('name')->index();
$table->string('locale')->index();
$table->unique(['role_id', 'name', 'locale']);
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
});
Jetzt habe ich diese an der Steuerung tue ...
public function indexData()
{
$roles = Role::join('role_translations', 'roles.id', '=', 'role_translations.role_id')
->select(['roles.id', 'role_translations.name', 'roles.created_at', 'roles.updated_at'])
->groupBy('roles.id');
... und dies im Blick (Initialisierung und allgemeine Einstellungen der Datentabelle werden in einer gemeinsamen js-Datei vorgenommen und bestimmte Einstellungen werden als HTML-Attribute übergeben) ...
<table class="table table-striped table-bordered" data-table data-ajax="{{ url('/admin/role/index-data') }}" data-responsive="true">
<thead>
<tr>
<th data-priority="1">{{ trans('messages.name') }}</th>
<th>{{ trans('messages.created') }}</th>
<th>{{ trans('messages.modified') }}</th>
<th data-priority="1" data-sortable="false" data-class-name="actions">{{ trans('messages.actions') }}</th>
</tr>
</thead>
</table>
Es funktioniert, aber ich fühle mich unwohl mit all denen, die Verbindungen zu der Abfrage und ich würde wie
etwas tun$roles = Role::with('translation')->select(['roles.id', 'role_translations.name', 'roles.created_at', 'roles.updated_at'])
Aber ich habe kein Glück.
Ich weiß, das funktioniert, aber ich bin nicht in der Lage, etwas ähnlich arbeiten mit dimsav übersetzbar Paket zu machen. Dieses Paket erstellt eine Eins-zu-viele-Beziehung. In diesem Fall hat eine Rolle viele Übersetzungen ihres Namensfeldes. Ich möchte den übersetzten Namen (im Fallback-Gebietsschema) unbedingt laden und dabei alle Joins vermeiden. –
Ich habe Ihren obigen Kommentar nicht erhalten? Kannst du mehr erklären? kannst du mir deine Rollenbeziehungen zeigen und wie du sie anzeigen möchtest? – Qazi
Ich meinte, dass ich ein anderes Paket verwende, dimsav übersetzbar (https: // github.com/dimsav/laravel-übersetzbar), um die Übersetzungen meiner Modelle zu verwalten. Die Beziehungen, die mit diesem Paket hergestellt wurden, sind im Modell nicht explizit. In meinem obigen Beispiel sehen Sie auf dem Controller mit allen Joins die Datenbankstruktur, mit der dimsav übersetzbar arbeitet. Ich möchte gerne die Übersetzung des Rollenmodells mit dem Fallback-Gebietsschema laden, anstatt all diese bösen Verknüpfungen zu verwenden. –