Приёмы работы с Eloquent, о которых вы еще не слышали.
При использовании методов find() и findOrFail() во втором аргументе вы можете указать нужные столбцы.
$user = App\User::find(1, ['name', 'age']);
$user = App\User::findOrFail(1, ['name', 'age']);
Вы можете склонировать модель, используя replicate(). Это создаст новую копию модели.
$user = App\User::find(1);
$newUser = $user->replicate();
$newUser->save();
Используя метод is() можно узнать имеют ли две модели один ID и одну таблицу.
$user = App\User::find(1);
$sameUser = App\User::find(1);
$diffUser = App\User::find(2);
$user->is($sameUser); // true
$user->is($diffUser); // false
Можно перезагрузить модель, чтобы получить обновленные значения из базы данных.
$user = App\User::first();
$user->name; // John
// запись пользователя была обновлена в другом потоке. например, поле 'name' изменилось на Peter.
$user->refresh();
$user->name; // Peter
05: Загрузка свежей модели
Для получения нового экземпляра модели из базы данных используйте fresh().
Примечание: это не обновление текущей модели, а именно получение нового экземпляра.
$user = App\User::first();
$user->name; // John
// запись пользователя была обновлена в другом потоке. например, поле 'name' изменилось на Peter.
$updatedUser = $user->fresh();
$updatedUser->name; // Peter
$user->name; // John
06: Сохранение модели с отношениями
Используйте push() для сохранения модели с её отношениями.
class User extends Model
{
public function phone()
{
return $this->hasOne('App\Phone');
}
}
$user = User::first();
$user->name = "Peter";
$user->phone->number = '1234567890';
$user->push(); // Это обновит и пользователя и телефон в базе данных
По умолчанию Laravel выполняет «мягкое удаление», используя столбец delete_at. Вы можете изменить это, создав свой собвственный столбец для этих целей.
class User extends Model
{
use SoftDeletes;
* Название столбца "deleted at"
*
* @var string
*/
const DELETED_AT = 'is_deleted';
}
или определив читателя:
class User extends Model
{
use SoftDeletes;
public function getDeletedAtColumn()
{
return 'is_deleted';
}
}
Используя метод getChanges() вы можете получить измененные атрибуты модели.
$user->getChanges();
//[
"name" => "Peter",
]
С помощью метода isDirty() можно проверить изменялась ли модель.
$user = App\User::first();
$user->isDirty(); //false
$user->name = "Peter";
$user->isDirty(); //true
Вы также можете проверить изменение определенных атрибутов:
$user->isDirty('name'); //true
$user->isDirty('age'); //false
10: Получение исходных значений
После изменения записей в Eloquent вы можете получить исходное значение атрибута при помощи метода getOriginal().
$user = App\User::first();
$user->name; //John
$user->name = "Peter"; //Peter
$user->getOriginal('name'); //John
$user->getOriginal(); //Исходное значение $user
Автор: Jebran Ali
Перевод: Demiurge Ash