다시 작성된 제목은 다음과 같습니다. 모델의 추가된 속성에 있는 다른 모델 속성에 액세스할 때 "무한 루프"가 발생하는 원인은 무엇입니까?
P粉786432579
2023-09-04 17:47:10
<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>
getTitleMediumAttribute 대신 attribute를 사용해 보세요. 그래도 같은 오류가 발생하면 알려주세요(`getTitleMediumAttribute 대신 이 메소드 사용).
으아악
🎜입니다.Attribute
属性
是IlluminateDatabaseEloquentCastsAttribute
는IlluminateDatabaseEloquentCastsAttribute