Я использую две модели в Laravel, которые связаны отношением «многие ко многим». Модели Pictures
и Labels
. Файл миграции для Labels
:
class CreateLabelsTable extends Migration {
public function up() {
Schema::create('labels', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name', 128);
$table->enum('type', [ 'text' , 'contact' ]);
$table->timestamps();
});
}
public function down() {
Schema::dropIfExists('labels');
}
}
Внутри модели для Picture
я определил
class Picture extends Model {
public function labels() {
return $this->belongsToMany('App\Label')
->withTimestamps();
}
}
В контроллере теперь я могу использовать следующий код PHP
$ptrPicture = Picture::findorfail(3); // '3' is an example of an id here
return response()->json($ptrPicture->labels()->pluck('id')->toArray());
, что, например, приводит к [5, 6, 9]
для идентификаторов Labels
, которые связаны с Picture(3)
. Это хорошо работает, но теперь я не хочу возвращать идентификаторы только Label
, но все столбцы для Label
. Как мне получить что-то вроде следующего с Laravel?
[
{ id: 5, name: 'foo', type: 'text' },
{ id: 6, name: 'bar', type: 'text' },
{ id: 9, name: 'etc', type: 'contact' }
]
С pluck
Я могу вернуть только один из столбцов? Как мне вернуть все три столбца?
ПО ЗАПРОСУ ... вот мои другие файлы миграции:
class CreatePicturesTable extends Migration {
public function up() {
Schema::create('pictures', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('filename', 256);
$table->string('description', 4096)->nullable();
$table->timestamps();
});
}
public function down() {
Schema::dropIfExists('pictures');
}
}
class CreateLabelPictureTable extends Migration {
public function up() {
Schema::create('label_picture', function (Blueprint $table) {
$table->bigInteger('label_id')->unsigned();
$table->foreign('label_id')
->references('id')
->on('labels')
->onDelete('cascade');
$table->bigInteger('picture_id')->unsigned();
$table->foreign('picture_id')
->references('id')
->on('pictures')
->onDelete('cascade');
$table->timestamps();
});
}
public function down() {
Schema::dropIfExists('label_picture');
}
}