Arkadaşlar şöyle bir sayfayanın controllerını yazıyorum. Biraz fazla ilişkili tablodan kullanılacak veriler var.

Bu sayfa için controllerım da bu:
<?php
use Lib\Favorite as Favorite;
use Lib\Point as Point;
use Lib\Phone as Phone;
use Lib\Services as Services;
use Lib\Pitch as Pitch;
use Lib\Photo as Photo;
use Lib\Reservation as Reservation;
use Lib\Comment as Comment;
class HalisahaController extends BaseController {
/**
* Halı saha account nesnesini tutan değişken
*/
protected $halisahaAccount;
/**
* AuthControl nesnesini tutar
*/
protected $authControl;
/**
* Favorite nesnesini tutar
*/
protected $favorite;
/**
* Point nesnesini tutar
*/
protected $point;
/**
* Phone nesnesini tutar
*/
protected $phone;
/**
* Services nesnesini tutar
*/
protected $service;
/**
* Pitch nesnesini tutar
*/
protected $pitch;
/**
* Photo nesnesini tutar
*/
protected $photo;
/**
* Reservation nesnesini tutar
*/
protected $reservation;
/**
* Comment nesnesini tutar
*/
protected $comment;
/**
* get edilen halısaha değişkeni
*/
private $getHalisaha;
/**
* Halı sahayı tutan değişken
*/
private $halisaha;
public function __construct (HalisahaAccount $halisahaAccount, AuthControl $authControl, Favorite $favorite, Point $point, Phone $phone, Services $service, Pitch $pitch, Photo $photo, Reservation $reservation, Comment $comment) {
$this->halisahaAccount = $halisahaAccount;
$this->authControl = $authControl;
$this->favorite = $favorite;
$this->point = $point;
$this->phone = $phone;
$this->service = $service;
$this->pitch = $pitch;
$this->photo = $photo;
$this->reservation = $reservation;
$this->comment = $comment;
}
/**
* halisahaya ait sayfa
*
*/
public function getIndex($halisaha){
$this->getHalisaha = $halisaha;
// gelen url veya id ye göre halısaha çekilir
if (is_numeric($this->getHalisaha)) {
$this->halisaha = $this->halisahaAccount->with([
'halisahaInformationWithAdmin',
'halisahaPaymentDetail',
'favoriteHalisahaCount',
'halisahaPoint',
'halisahaFacebookUrl',
'halisahaFoursquareUrl',
'halisahaGoogleplusUrl',
'halisahaPinterestUrl',
'halisahaTwitterUrl',
'halisahaInstagramUrl',
'halisahaVimeoUrl',
'halisahaYoutubeUrl',
'halisahaCoverPhoto',
'halisahaAdress.county.province',
'halisahaPhone',
'halisahaDescription',
'halisahaPitch',
'services',
'halisahaPhoto',
'halisahaComment'=>function ($q) {
$q->with(['userAccount'=>function ($q2) {
$q2->with([
'userPersonelInformation',
'userPhoto',
'userUrl'
])->get();
}])->get();
},
'halisahaUrl'
])->findOrFail($this->getHalisaha)->toArray();
// eğer halısahanın url'si varsa ona yönlendirilir
if (is_array($this->halisaha['halisaha_url']) && array_key_exists('url',$this->halisaha['halisaha_url'])) {
return Redirect::to('halisaha/'.$this->halisaha['halisaha_url']['url']);
}
} else {
$this->halisaha = $this->halisahaAccount->whereHas('halisahaUrl', function ($q) {
$q->where('url', '=', $this->getHalisaha);
})->with([
'halisahaInformationWithAdmin',
'halisahaPaymentDetail',
'favoriteHalisahaCount',
'halisahaPoint',
'halisahaFacebookUrl',
'halisahaFoursquareUrl',
'halisahaGoogleplusUrl',
'halisahaPinterestUrl',
'halisahaTwitterUrl',
'halisahaInstagramUrl',
'halisahaVimeoUrl',
'halisahaYoutubeUrl',
'halisahaCoverPhoto',
'halisahaAdress.county.province',
'halisahaPhone',
'halisahaDescription',
'halisahaPitch',
'services',
'halisahaPhoto',
'halisahaComment'=>function ($q) {
$q->with(['userAccount'=>function ($q2) {
$q2->with([
'userPersonelInformation',
'userPhoto',
'userUrl'
])->get();
}])->get();
},
'halisahaUrl'
])->firstOrFail()->toArray();
}
// reservasyonlar bugün ve ilk sahaya göre alınır.
$this->halisaha['reservation'] = $this->reservation->todayFirstPitchReservations($this->halisaha['id'],$this->halisaha['halisaha_pitch']);
// halı saha bilgileri düzenlenir
$this->halisaha = $this->editHalisahaInformation($this->halisaha);
// oturum kontrol edilir ve oturum sahibinin değerleri oluşturulur
$this->authControl->account();
return View::make('index',array('halisaha' => $this->halisaha));
}
/**
* Halı saha bilgilerini düzenleyen metod
* Bu metod sadece verileri düzenli bir dizi değişken haline getirmeye yarar
*
* @param array $halisaha
*/
private function editHalisahaInformation ($halisaha) {
$editHalisaha = [];
// halisaha account bilgileri
$editHalisaha['id'] = $halisaha['id'];
$editHalisaha['email'] = $halisaha['email'];
$editHalisaha['active'] = $halisaha['active'];
// halisaha information
$editHalisaha['halisaha_name'] = $halisaha['halisaha_information_with_admin']['halisaha_name'];
$editHalisaha['admin_name'] = $halisaha['halisaha_information_with_admin']['admin_name'];
$editHalisaha['admin_surname'] = $halisaha['halisaha_information_with_admin']['admin_surname'];
// halisaha payment detail
$editHalisaha['down_payment'] = $halisaha['halisaha_payment_detail']['down_payment'];
// favorite halisaha adedi alınır
$editHalisaha['favorite_halisaha_count'] = $this->favorite->favoriteHalisahaCount($halisaha['favorite_halisaha_count']);
// halısaha point ortalaması alınır
$editHalisaha['point'] = $this->point->averagePoint($halisaha['halisaha_point']);
// halısaha social url
$editHalisaha['facebook'] = $halisaha['halisaha_facebook_url']['url'];
$editHalisaha['foursquare'] = $halisaha['halisaha_foursquare_url']['url'];
$editHalisaha['googleplus'] = $halisaha['halisaha_googleplus_url']['url'];
$editHalisaha['pinterest'] = $halisaha['halisaha_pinterest_url']['url'];
$editHalisaha['twitter'] = $halisaha['halisaha_twitter_url']['url'];
$editHalisaha['intagram'] = $halisaha['halisaha_instagram_url']['url'];
$editHalisaha['vimeo'] = $halisaha['halisaha_vimeo_url']['url'];
$editHalisaha['youtube'] = $halisaha['halisaha_youtube_url']['url'];
// halisaha cover photo
$editHalisaha['halisaha_cover_photo'] = (count($halisaha['halisaha_cover_photo']) == 1) ? $halisaha['halisaha_cover_photo'][0]['photo'] : '';
// halisaha adress
$editHalisaha['adress']['province'] = $halisaha['halisaha_adress']['county']['province']['province'];
$editHalisaha['adress']['county'] = $halisaha['halisaha_adress']['county']['county'];
$editHalisaha['adress']['adress'] = $halisaha['halisaha_adress']['adress'];
// halisaha phone
$editHalisaha['phones'] = $this->phone->phoneClassify($halisaha['halisaha_phone']);
// halisaha description
$editHalisaha['description'] = $halisaha['halisaha_description']['description'];
// halisaha pitchs
$editHalisaha['pitchs'] = $this->pitch->pitchsEdit($halisaha['halisaha_pitch']);
// halisaha services
$editHalisaha['services'] = $this->service->servicesClassify($halisaha['services']);
// halisaha photos
$editHalisaha['photos'] = $this->photo->photosEdit($halisaha['halisaha_photo']);
// halisaha comments
$editHalisaha['comments'] = $this->comment->commentEdit($halisaha['halisaha_comment']);
// halisaha url
$editHalisaha['url'] = $halisaha['halisaha_url']['url'];
// halisaha reservations
$editHalisaha['reservations'] = $this->reservation->reservationsEdit($halisaha['reservation']);
return $editHalisaha;
}
}
Evet özellikle ilişkiler ile eloquentin olduğu yer korkunç görünüyor. Eleştirebilir misiniz? Daha iyi nasıl olabilir?