찾다

 >  Q&A  >  본문

다시 작성된 제목은 다음과 같습니다. 모델의 추가된 속성에 있는 다른 모델 속성에 액세스할 때 "무한 루프"가 발생하는 원인은 무엇입니까?

<p>내 <strong>Laravel 9</strong> 애플리케이션에는 <code>brand</code> 모델과 <code>product</code> 모델이 있습니다. 각 <코드>제품은 하나의 <코드>브랜드에 속하고, 하나의 <코드>브랜드는 여러 개의 <코드>제품에 속합니다(1:n 관계). <code>product</code> 모델은 요청 시 브랜드 제목과 제품 제목을 연결하는 <code>title_medium</code>이라는 "계산된"(추가) 속성을 제공해야 합니다. </p> <p>제품 모델의 <code>getTitleMediumAttribute()</code> 메소드에서 <code>$this->brand</code>에 액세스하려고 하면 <code>xdebug</code> <code>possibleInfiniteloop</code> 예외가 발생하고 실행이 취소됩니다(N 반복 후). 나는 이것이 관계 및 로드 시퀀스(열심히 로드)와 관련이 있다고 생각하지만 지금까지 해결책을 찾을 수 없습니다. </p> <h2>브랜드 모델</h2> <p><code>brand</code> 모델에는 <code>title</code> 속성이 있으며 <code>brand</ 코드>. </p> <pre class="brush:php;toolbar:false;">네임스페이스 AppModels; IlluminateDatabaseEloquentFactoriesHasFactory를 사용하세요. IlluminateDatabaseEloquentModel을 사용하세요. IlluminateDatabaseEloquentRelationsHasMany를 사용하세요. IlluminateSupportStr을 사용하십시오. 클래스 브랜드 확장 모델 { HasFactory를 사용하세요. /*** 이 모델의 추가 속성*/ 보호된 $appends = [ '물가' ]; 보호된 $fillable = [ '제목' ]; /*** "부팅된" 모델의 방법. * * @return 무효*/ 보호된 정적 함수 booted() { static::creating(함수 ($brand) { $brand->slug = Str::slug($brand->title, '-', 'de'); }); } /*** 해당 브랜드의 모든 제품을 반환합니다. * * @return HasMany*/ 공용 함수 제품(): HasMany { return $this->hasMany(Product::class); } }</pre> <h2>제품 모델 번호</h2> <p>각 <code>제품</code>은 <code>브랜드</code>에 속합니다. 추가 속성 <code>title_medium</code>은 브랜드 제목과 제품 제목을 연결해야 합니다.</p> <pre class="brush:php;toolbar:false;">네임스페이스 AppModels; 클래스 제품 확장 모델 { HasFactory, Searchable, Filterable을 사용합니다. 보호된 $fillable = [ '제목', '브랜드_ID', '영상' ]; /*** 이 모델의 추가 속성*/ 보호된 $appends = [ '제목_긴', '최저 가격', '최고_할인_퍼센트_가격', '최신_가격_날짜', '가격_개수' ]; /*** "부팅된" 모델의 방법. * * @return 무효*/ 보호된 정적 함수 booted() { static::creating(함수 ($product) { $product->slug = Str::slug($product->title_long, '-', 'de'); }); } /*** 제품은 하나의 브랜드에 속합니다*/ 공용 함수 브랜드(): BelongsTo { return $this->belongsTo(Brand::class); } /*** 제품과 브랜드에서 통합된 제목을 얻으세요*/ 공용 함수 getTitleMediumAttribute(): 문자열 { // 이로 인해 "가능한 무한 루프 예외"가 발생합니다. xdebug에서 $this->brand->title 을 반환합니다. ' ' . $this->제목; } }</pre></p>
P粉786432579P粉786432579452일 전454

모든 응답(1)나는 대답할 것이다

  • P粉306523969

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

    getTitleMediumAttribute 대신 < code>attribute를 사용해 보세요. 그래도 같은 오류가 발생하면 알려주세요(`getTitleMediumAttribute 대신 이 메소드 사용).

    으아악

    Attribute属性IlluminateDatabaseEloquentCastsAttributeIlluminateDatabaseEloquentCastsAttribute

    🎜입니다.

    회신하다
    0
  • 취소회신하다