Друзья, помогите мне инфу в голове по полочкам правильно уложить.
Я честно вам скажу, не могу понять чем лучше отношения от обычных запросов
Вот пример, есть у меня 3 таблицы:
payment_services
id
type_object_id
object_id
type_service_id
type_objects
id
name
translit
type_services
id
name
translit
где type_object_id - внешний ключ таблицы type_objects, type_service_id - внешний ключ таблицы type_service
Мне нужно получить коллекцию в которой будут поля с условием type_services.translit='hot'
payment_services->object_id
type_objects->translit
Если делать простым запросом то вот
SELECT *
FROM payment_services
LEFT JOIN type_objects ON type_objects.id = payment_services.type_object_id
LEFT JOIN type_services ON type_services.id = payment_services.type_service_id
WHERE type_services.translit='hot'
На выходе я получу все необходимые мне данные с избытком.
Вот, что у меня получилось сделать с отношениями:
class paymentService extends Model
{
public static function ads()
{
typeService::where('translit', 'hot')->first()->actualAdsPayments();
}
}
class typeService extends Model
{
public function actualAdsPayments()
{
return typeService::hasManyThrough('App\paymentService','App\typeService','id')
}
}
Здесь я получу не все данные, в частности я не получу type_objects->translit, вот что у меня получается на выходе
#original: array:9 [▼
"id" => 3
"type_object_id" => 3
"object_id" => 1592148
"type_service_id" => 3
"period" => 7
"price" => "50.00"
"updated_at" => "2019-12-12 14:59:31"
"created_at" => "2019-12-11 22:20:42"
"laravel_through_key" => 3
]
поля: price, period, updated_at, created_at из таблицы payment_services, в начале их не стал описывать как не значащие.
По правилам ORM мне все нужно делать ч/з отношения, но я хоть убей не понимаю зачем? Если обычный запрос для меня куда понятней и проще, да и ч/з отношения я не получаю все необходимые мне поля.
Даже если если взять классику, "один автор и много книг", зачем мне отношения, если я все смогу сделать одним запросом с операторам LEFT JOIN
Только сразу к доке не отсылайте, читал ее на несколько раз, но так и не понял нужности отношений ((