Bu sorunun cevabı çok basit. Aslında cevabı Eloquent olanaklarından bir örneği paylaşarak cevaplayabilirim. Bu nedenle cevap basit .
Eloquent miras aldığı Builder sınıfı içinde kullanılan find() methodu şu:
/**
* Execute a query for a single record by ID.
*
* @param int $id
* @param array $columns
* @return mixed|static
*/
public function find($id, $columns = array('*'))
{
return $this->where('id', '=', $id)->first($columns);
}
Biz modeller için statik olarak çağrılacak bir şekilde yapmak istersek
şöyle yapabiliriz.
herhangi bir model içinde
[
public static function findByYazi($yazi_name, $columns = array('*')) {
$instance = new static;
return $instance->newQuery()->where('yazi_name' = $yazi_name)->first($columns);
}
Bu methodu kullanmak istediğin modele ekleyebilirsin ya da bu methodun oduğu bir sınıf yazarsın ve bu sınıf Eloquent miraz alan bir sınıf olmalı. Sonra 'findByYazi' methodunu kullanan modellerin yeni oluşturduğun sınıfı da miras alabilir. Bu sayede her defasında bu methodu tanımlamamış olursun.
Başka şekilde çözümler bulunabilir. Muhtemelen model için Eloquent olanağı olan Query Scopes kullanarak da istenilen tarzda bir find benzeri method yaratılabilir.
Performans sorunu için yaratılan methodun içinde kullanılan colonun veritabanında indexlenmesi lazım.
not: Bu nasıl bir cümledir: 'yazilar tablomdaki baska bolumu göre bulmasını istiyorum ancak otomatik olarak id üzerine tanımlı bunu nasıl değiştirebilirim. Tüm sistemi etkilemicek şekilde' !