Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[5.4] Adding support to collection on Eloquent::find #19019

Merged
merged 1 commit into from
May 2, 2017

Conversation

dbpolito
Copy link
Contributor

@dbpolito dbpolito commented May 1, 2017

Most of eloquent query methods accepts array or Arrayable, and recently this changed on version 5.4... I'm upgrading a app from 5.2 and it used to work.

This fixed my problem, now:

Model::find(collect([1, 2]));

Works as expected.

@tillkruss tillkruss changed the title Adding support to collection on Eloquent::find [5.4] Adding support to collection on Eloquent::find May 1, 2017
@taylorotwell taylorotwell merged commit 4624b89 into laravel:5.4 May 2, 2017
@andrewtweber
Copy link

Just a note that this "breaks" previous behavior. Granted, this would have probably only happened by mistake. But I don't think the new behavior is intuitive either.

$user1 = User::find(1);
$user2 = User::find($user1);

Old

$user2 == $user1. They are both Eloquent models with the same ID

New

$user2 is now a Collection containing a single model with the same ID as $user1

@joshmanders
Copy link
Contributor

What would be the point in that snippet of code, @andrewtweber ?

@andrewtweber
Copy link

Granted, this would have probably only happened by mistake.

As I said.

My point is that this can change the output of probably the most frequently used method in Eloquent. Just thought people should know.

sebdesign added a commit to sebdesign/framework that referenced this pull request Oct 16, 2019
I found a regression in laravel#7048 and laravel#19019, where the Eloquent Builder will not throw a `ModelNotFoundException` when an `Arrayable` is passed to `findOrFail`.

In this laravel#7048, we are checking if the `$ids` is an array and we count the results against the number of ids.

But since laravel#19019, the `find` method also accepts an `Arrayable` for the ids.

So if an `Arrayable` is passed, the check is skipped and the method returns the results.

To fix this, we are first checking if the `$ids` is an  `Arrayable` and we convert the ids to an array before checking the results.
sebdesign added a commit to sebdesign/framework that referenced this pull request Oct 16, 2019
…ptions

The regression in laravel#7048 and laravel#19019 is also observed in laravel#9143, because the `find`,  `findMany` and `findOrFail` methods are copied from the Eloquent Builder to the `BelongsToMany` and `HasManyThrough` relations.

For this reason, we need to convert the passed ids to an array before executing the queries.
sebdesign added a commit to sebdesign/framework that referenced this pull request Oct 16, 2019
The regression in laravel#7048 and laravel#19019 is also observed in laravel#9143, because the `find`,  `findMany` and `findOrFail` methods are copied from the Eloquent Builder to the `BelongsToMany` and `HasManyThrough` relations.

For this reason, we need to convert the passed ids to an array before executing the queries.
sebdesign added a commit to sebdesign/framework that referenced this pull request Oct 16, 2019
The regression in laravel#7048 and laravel#19019 is also observed in laravel#9143, because the `find`,  `findMany` and `findOrFail` methods are copied from the Eloquent Builder to the `BelongsToMany` and `HasManyThrough` relations.

For this reason, we need to convert the passed ids to an array before executing the queries.
sebdesign added a commit to sebdesign/framework that referenced this pull request Oct 16, 2019
…regression in laravel#7048 and laravel#19019 is also observed in laravel#9143, because the `find`,  `findMany` and `findOrFail` methods are copied from the Eloquent Builder to the `BelongsToMany` and `HasManyThrough` relations.For this reason, we need to convert the passed ids to an array before executing the queries.
taylorotwell pushed a commit that referenced this pull request Oct 18, 2019
* Ensure Builder::findOrFail with Arrayable throws ModelNotFoundException

I found a regression in #7048 and #19019, where the Eloquent Builder will not throw a `ModelNotFoundException` when an `Arrayable` is passed to `findOrFail`.

In this #7048, we are checking if the `$ids` is an array and we count the results against the number of ids.

But since #19019, the `find` method also accepts an `Arrayable` for the ids.

So if an `Arrayable` is passed, the check is skipped and the method returns the results.

To fix this, we are first checking if the `$ids` is an  `Arrayable` and we convert the ids to an array before checking the results.

* Ensure find* methods on relationships are accepting Arrayable idsThe regression in #7048 and #19019 is also observed in #9143, because the `find`,  `findMany` and `findOrFail` methods are copied from the Eloquent Builder to the `BelongsToMany` and `HasManyThrough` relations.For this reason, we need to convert the passed ids to an array before executing the queries.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants