Bishal Paudel
Bishal Paudel

Reputation: 1946

Clone eloquent models for different queries

Sorry for modifying this question (to all those who have answered here). The question was in fact wrong.

$query = User::find(1)->books();  //books() is "return $this->hasMany('Book');"

$query_for_counting_history_books = clone $query;
$query_for_counting_geography_books = clone $query;

$number_of_history_books = $query_for_counting_history_books->where('type', '=', 'history')->count();
$number_of_geography_books = $query_for_counting_geography_books->where('type', '=', 'geography')->count();

$books = $query->paginate(10);

I want $books to be queried as:

SELECT * FROM books WHERE user_id=1 limit 10;

But its output is:

SELECT * FROM books WHERE user_id=1 and type="history" and type="geography" limit 10;

Upvotes: 3

Views: 2087

Answers (2)

Bishal Paudel
Bishal Paudel

Reputation: 1946

Since $query is instance of HasMany, So the cloning should be done as:

$query_for_counting_history_books = clone $query->getQuery();

$query_for_counting_geography_books = clone $query->getQuery();

http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Relations/HasOneOrMany.html#method_getQuery

Upvotes: 0

Laurence
Laurence

Reputation: 60048

Not sure why your clone() is not working - but try this:

$query = User::where('confirmed', '=', '1');
$query_for_counting_male = $query->replicate();
$query_for_counting_female = $query->replicate();

http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Model.html#method_replicate

Upvotes: 2

Related Questions