Kami sedang membangunkan ciri dalam codotto.com di mana pengguna boleh meninggalkan komen pada pertemuan IT. Setiap komen boleh ada jawapan. Kami hanya membenarkan satu tahap jawapan yang mendalam, contohnya:
- Comment 1 - Answer to comment 1 - Answer to comment 1 - Comment 2 - Answer to comment 2 - Answer to comment 2
Saya mempunyai struktur pangkalan data berikut:
// meetup_messages - id - user_id - meetup_id - meetup_message_id (nullable) -> comments that do not answer will have this set to nullable
Dalam model saya, saya akan answers
定义为 HasMany
hubungan:
class MeetupMessage extends Model { // ... public function answers(): HasMany { return $this->hasMany(self::class, 'meetup_message_id'); } }
Kemudian pada pengawal saya, saya mendapat semua komen tanpa jawapan:
public function index( IndexMeetupMessageRequest $request, Meetup $meetup, MeetupMessageService $meetupMessageService ): MeetupMessageCollection { $meetupMessages = MeetupMessage::with([ 'user', // 'answers' => function ($query) { // $query->limit(3); // } 'answers' ]) ->whereNull('meetup_message_id') ->whereMeetupId($meetup->id) ->paginate(); return new MeetupMessageCollection($meetupMessages); }
Kemudian pada MeetupMessageCollection
saya:
class MeetupMessageCollection extends ResourceCollection { public function toArray($request) { return parent::toArray($request); } }
Kemudian pada MeetupMessageResource
saya:
<?php namespace AppHttpResources; use IlluminateHttpResourcesJsonJsonResource; use IlluminateSupportCollection; class MeetupMessageResource extends JsonResource { public function toArray($request) { return collect([ // 'answers' => new MeetupMessageCollection($this->whenLoaded('answers')), ]) ->when( is_null($this->meetup_message_id) && $this->relationLoaded('answers'), function (Collection $collection) { $collection->put('answers', MeetupMessageCollection::collection($this->answers)); } ); } }
Tetapi saya mendapat ralat berikut: Panggil ke kaedah yang tidak ditentukan AppModelsMeetupMeetupMessage::mapInto()
. Bagaimanakah saya masih boleh menggunakan 调用未定义的方法 AppModelsMeetupMeetupMessage::mapInto()
。我如何通过将 answers
传递给它来仍然使用 MeetupMessageCollection
dengan menghantar jawapan
kepadanya?
Seperti yang @matialauriti nyatakan, anda tidak boleh menggunakan koleksi sumber dalam koleksi dalam Laravel
Penyelesaian saya ialah menarik borang sumber saya ke dalam kaedah peribadi dan menggunakannya semula apabila
answers
hadir: