Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel中多对多关系的所有列的JSON响应_Php_Laravel - Fatal编程技术网

Php Laravel中多对多关系的所有列的JSON响应

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

我在Laravel中使用了两个通过多对多关系链接的模型。模型是
图片
标签
标签的迁移文件是

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,很高兴你找到了它:)