Bu sesler açık, ancak Eloquent burada bir sonuç kümesi döndürmeyecek, ancak bir koleksiyona dönecektir.
sen (Builder::get
Connection::select
çağırır; Builder::runSelect
çağırır; Builder::getFresh
çağırır) kaynağına kazmak, bunu niyeti basitçe sonra SortBy olan bir koleksiyona (yerleştirilir sonuçları, geri dönmek mi olduğunu göreceksiniz yöntem). Her öğeyi yüklemeden pagination olmasını istiyorsanız
/**
* Run a select statement against the database.
*
* @param string $query
* @param array $bindings
* @param bool $useReadPdo
* @return array
*/
public function select($query, $bindings = array(), $useReadPdo = true)
{
return $this->run($query, $bindings, function($me, $query, $bindings) use ($useReadPdo)
{
if ($me->pretending()) return array();
// For select statements, we'll simply execute the query and return an array
// of the database result set. Each element in the array will be a single
// row from the database table, and will either be an array or objects.
$statement = $this->getPdoForSelect($useReadPdo)->prepare($query);
$statement->execute($me->prepareBindings($bindings));
//** this is a very basic form of fetching, it is limited to the PDO consts.
return $statement->fetchAll($me->getFetchMode());
});
}
, o zaman (aşağıda çoğaltılamaz) Marcin çözümüyle @ kullanmanız gerekir: bu kadar açık konuşmak gerekirse,
$posts = Post::leftJoin('comments','posts.id','=','comments.post_id')->
selectRaw('posts.*, count(comments.post_id) AS `count`')->
groupBy('posts.id')->
orderBy('count','DESC')->
skip(0)->take(20)->get();
thansk, bu çözüm olmaz tüm kayıtları veritabanından al ve sonra sırala, çok başlangıçta sadece 20 kayıt alır? – dulan
@dulan, evet 2. kod hakkında konuşuyorsak. 1. kodda tüm kayıtlar veritabanından alınacak ve bunlardan sadece birkaçı görüntülenecektir, bu yüzden skip() –
2. çözümünü seçmeniz gerekiyor, çünkü teşekkürler skip() –