Здравствуйте, я думаю, что разница в том, что метод has () ищет только ключи, например:
$collection = collect(['account_id' => 1, 'product' => 'Desk', 'amount' => 5]);
$collection->has('product');
// true
$collection->has(['product', 'amount']);
// true
$collection->has(['amount', 'price']);
// false
и метод contains () используется для определения, существует ли данный $ key в коллекции. Кроме того, можно указать необязательное значение $, которое будет использоваться для проверки, существует ли данная пара ключ / значение в коллекции.
Пример 1: в основном смысле:
use Illuminate\Support\Collection;
// Create a new collection instance.
$collection = new Collection([
'bear',
'whale',
'chicken',
'tardigrade'
]);
// true
$collection->contains('bear');
// true
$collection->contains('tardigrade');
// false
$collection->contains('dog');
Пример 2: использование метода contains для проверки, существует ли заданная пара ключ / значение в коллекции, которая содержит массивы в качестве элементов:
use Illuminate\Support\Collection;
// Create a new collection instance.
$collection = new Collection([
['big' => 'bear'],
['bigger' => 'whale'],
['small' => 'chicken'],
['smaller' => 'tardigrade']
]);
// true
$collection->contains('big', 'bear');
// true
$collection->contains('smaller', 'tardigrade');
// false
$collection->contains('smaller', 'paramecium');
Пример 3: используется для коллекций объектов с использованием гипотетического класса User:
use Illuminate\Support\Collection;
class User
{
/**
* A hypothetical user's first name.
*
* @var string
*/
public $firstName = '';
/**
* A hypothetical user's favorite number.
*
* @var integer
*/
public $favoriteNumber = 0;
public function __construct($firstName, $favoriteNumber)
{
$this->firstName = $firstName;
$this->favoriteNumber = $favoriteNumber;
}
}
// Create a new collection instance.
$collection = new Collection([
new User('Jane', 7),
new User('Sarah', 9),
new User('Ben', 2)
]);
// true
$collection->contains('firstName', 'Jane');
// false
$collection->contains('firstName', 'Josh');
// false
$collection->contains('lastName', 'Jane');
// true
$collection->contains('favoriteNumber', 2);
удачи;)