Php Laravel中多对多关系的所有列的JSON响应
我在Laravel中使用了两个通过多对多关系链接的模型。模型是Php Laravel中多对多关系的所有列的JSON响应,php,laravel,Php,Laravel,我在Laravel中使用了两个通过多对多关系链接的模型。模型是图片和标签。标签的迁移文件是 class CreateLabelsTable extends Migration { public function up() { Schema::create('labels', function (Blueprint $table) { $table->bigIncrements('id'); $table->str
图片
和标签
。标签的迁移文件是
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');
}
}
在我定义的图片的模型中
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());
例如,对于连接到图片(3)
的标签的ID,[5,6,9]
。这很好地工作,但是现在我不想只返回标签的ID,而是返回标签的所有列。我怎样才能在Laravel的帮助下获得如下所示的退货
[
{ id: 5, name: 'foo', type: 'text' },
{ id: 6, name: 'bar', type: 'text' },
{ id: 9, name: 'etc', type: 'contact' }
]
使用pulk
I只能返回其中一列?如何返回所有三列
应要求。。。以下是我的其他迁移文件:
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');
}
}
以下任一项都可以完成此工作
$ptrPicture->labels->toArray(); // note the absence of brackets after 'labels'
// OR
$ptrPicture->labels()->get()->toArray();
您是否尝试删除了弹拨?返回$ptrPicture->标签
Hi-Felippe Duarte:我试图删除Pulk
,但随后出现以下错误:“调用未定义的方法Illumb\Database\Eloquent\Relations\BelongToAny::toArray()”。你有不同的建议吗?你可以这样做:$ptrPicture->labels()->get()->toArray()
好的,Steevie。你能用标签、按钮和数据透视表迁移更新你的问题吗?嗨,Maksim Ivanov。不幸的是,这不起作用。对于这两个建议,我都收到一个SQL错误:“SQLSTATE[42S22]:找不到列:1054未知列…其中'label\u picture'。'picture\u id'=3)”。你有什么不同的建议吗?嗨,马克西姆·伊万诺夫。完整的错误消息是“SQLSTATE[42S22]:未找到列:1054未知列“label\u picture.type”在“field list”中(SQL:选择“标签”。*,“标签图片”。“图片id”为“枢轴图片id”,“标签图片”。“标签图片”为“枢轴图片id”,“标签图片”。“类型”为“枢轴类型”,“标签图片”。“创建位置”为“枢轴图片创建位置”,“标签图片”。“更新位置”为“枢轴图片更新位置”,从“标签”上的“标签”内部连接“标签图片”。“id”=“标签图片”。“标签图片”。”l_id'where'label_picture.'picture_id'=3)“异常:”lightlight\Database\QueryException.这有帮助吗?@Steevie,为什么它试图从透视表中提取'type'?嗨,马克西姆·伊万诺夫。你让我开心了一天。我查看了它,发现我为图片包含了错误的模型。我有return$this->belongstomanity('App\Piclabel'))->withPivot('type')->withPivot('contact_id')->withTimestamps();
在我之前的代码中,对其进行了更改,但由于我包含了另一个文件,我犯了一个错误。@Steevie,很高兴你找到了它:)