cari

Rumah  >  Soal Jawab  >  teks badan

Tajuk yang ditulis semula ialah: Apakah yang menyebabkan "gelung tak terhingga berkemungkinan" apabila mengakses atribut model lain dalam atribut model yang dilampirkan?

<p>Aplikasi <strong>Laravel 9</strong> saya mempunyai dua model: model <kod>jenama</kod> Setiap <kod>produk</kod> milik satu <kod>jenama</kod> dan satu <kod>jenama</kod> kepunyaan berbilang <kod> perhubungan). Model <kod>produk</kod> hendaklah menyediakan sifat "dikira" (tambahan) yang dipanggil <kod>title_medium</kod> yang menggabungkan tajuk jenama dan tajuk produk atas permintaan. </p> <p>Sebaik sahaja saya cuba mengakses <code>$this->brand</code> dalam <code>getTitleMediumAttribute()</code> kaedah <code>xdebug< Pengecualian <kod>possibleInfiniteloop</code> akan dilemparkan dan pelaksanaan akan dibatalkan (selepas N lelaran). Saya rasa ini ada kaitan dengan perhubungan dan urutan pemuatan (pemuatan bersemangat) tetapi saya tidak dapat mencari penyelesaian setakat ini. </p> <h2>Model Jenama</h2> Model <p><kod>jenama</kod> mempunyai atribut <kod>tajuk</kod> kod>. </p> <pre class="brush:php;toolbar:false;">namespace AppModels; gunakan IlluminateDatabaseEloquentFactoriesHasFactory; gunakan IlluminateDatabaseEloquentModel; gunakan IlluminateDatabaseEloquentRelationsHasMany; gunakan IlluminateSupportStr; kelas Jenama memanjangkan Model { gunakan HasFactory; /*** Atribut tambahan untuk model ini*/ dilindungi $appends = [ 'harga' ]; dilindungi $fillable = [ 'tajuk' ]; /*** Yang "boot" kaedah model. * * @pemulangan batal*/ fungsi statik dilindungi boot() { static::creating(function ($brand) { $brand->slug = Str::slug($brand->title, '-', 'de'); }); } /*** Mengembalikan semua produk untuk jenama * * @kembali HasMany*/ produk fungsi awam(): HasMany { pulangkan $this->hasMany(Product::class); } }</pre> <h2>Nombor model produk</h2> <p>Setiap <kod>produk</kod> kepunyaan <kod>jenama</kod>. Atribut tambahan <code>title_medium</code> hendaklah menggabungkan tajuk jenama dan tajuk produk.</p> <pre class="brush:php;toolbar:false;">namespace AppModels; kelas Produk memanjangkan Model { gunakan HasFactory, Searchable, Filterable; dilindungi $fillable = [ 'tajuk', 'brand_id', 'gambar' ]; /*** Atribut tambahan untuk model ini*/ dilindungi $appends = [ 'title_long', 'harga terendah', 'harga_percent_discount_tertinggi', 'tarikh_harga_terkini', 'kiraan_harga' ]; /*** Yang "boot" kaedah model. * * @pemulangan batal*/ fungsi statik dilindungi boot() { static::creating(function ($product) { $product->slug = Str::slug($product->title_long, '-', 'de'); }); } /*** Produk milik satu jenama*/ jenama fungsi awam(): BelongsTo { pulangkan $this->belongsTo(Brand::class); } /*** Dapatkan tajuk gabungan daripada produk dan jenama*/ fungsi awam getTitleMediumAttribute(): rentetan { // INI MENYEBABKAN "KEMUNGKINAN PENGECUALIAN LOOP TAK TERHINGGA" dalam xdebug kembalikan $this->brand->title . '' . $ini->tajuk; } }</pre></p>
P粉786432579P粉786432579452 hari yang lalu453

membalas semua(1)saya akan balas

  • P粉306523969

    P粉3065239692023-09-05 15:17:18

    Cuba gunakan attribute dan bukannya < code>getTitleMediumAttribute, seperti ini dan beritahu saya jika anda masih mendapat ralat yang sama (gunakan kaedah ini dan bukannya `getTitleMediumAttribute):

    public function titleMedium(): Attribute
    {
        return Attribute::get(
            fn () => "{$this->brand->title} $this->title",
        );
    }
    

    Attribute属性IlluminateDatabaseEloquentCastsAttribute ialah IlluminateDatabaseEloquentCastsAttribute

    🎜

    balas
    0
  • Batalbalas