База данных:
Код: Выделить всё
* ----------------------- *
| users |
* ----------------------- *
| + id |
| + address_id |
* ----------------------- *
* ----------------------- *
| addresses |
* ----------------------- *
| + id |
| + country_code_id |
* ----------------------- *
* ----------------------- *
| country_codes |
* ----------------------- *
| + id |
* ----------------------- *
Код: Выделить всё
class User extends Model
{
public function address(): BelongsTo
{
return $this->belongsTo(Address::class);
}
public function country_code(): BelongsToThrough
{
return $this->belongsToThrough(CountryCode::class, Address::class);
}
}
Код: Выделить всё
class Address extends Model
{
public function user(): HasOne
{
return $this->hasOne(User::class);
}
public function country_code(): BelongsTo
{
return $this->belongsTo(CountryCode::class);
}
}
Код: Выделить всё
class CountryCode extends Model
{
public function address(): HasMany
{
return $this->hasMany(Address::class);
}
public function users(): HasManyThrough
{
return $this->hasManyThrough(User::class, Address::class);
}
}
Код: Выделить всё
class UserController extends Controller
{
public function show(Request $request, User $user)
{
# access countryCode through address from user
# not working:
return (new UserResource($user))->load('country_code');
}
}
Код: Выделить всё
class CountryCodeController extends Controller
{
public function show(Request $request, CountryCode $countryCode)
{
# access user through address from countryCode
# working:
return (new CountryCodeResource($countryCode))->load('user');
}
}
Код: Выделить всё
UserResource->load('address')Код: Выделить всё
AddressResource->load('country_code')Код: Выделить всё
CountryCodeResource->load('address')Код: Выделить всё
AddressResource->load('user')- с помощью hasManyThrough()
Код: Выделить всё
AddressResource->load('users')
Если я пробую обратный метод hasManyThrough, belongsToThrough, предоставленный Штауденмейром (используя UserResource->load('country_code')), я всегда получаю следующее сообщение об ошибке:
Код: Выделить всё
"message": "Call to undefined relationship [country_code] on model [App\\Models\\User]."
Если вам нужна дополнительная информация, просто спросите.
Заранее спасибо за помощь!
Изменить
Я также пробовал это с camelCase именование, но это не решило проблему.
Подробнее здесь: https://stackoverflow.com/questions/782 ... lationship
Мобильная версия