Laravel 11 Eloquent ORM: Feartan feumail ach air nach eil mòran eòlach
Tha Laravel na fhrèam MVC làn feart agus a tha a’ sìor atharrachadh
Tha an Eloquent ORM, ann an Laravel, a’ toirt seachad gnìomhachadh sìmplidh agus èifeachdach de ActiveRecord airson a bhith ag obair leis an stòr-dàta agad.
Anns an artaigil seo chì sinn cuid de fheartan nach eil aithnichte agus glè fheumail.
3 minuti
Chì sinn san artaigil seo mar as urrainn do Laravel 11 Eloquent ORM ar cuideachadh le fuasgladh fhaighinn air duilgheadasan sònraichte.
Colonna deleted_at
airson sguabadh bog
Bidh Laravel a’ làimhseachadh sguabadh às bog tron cholbh deleted_at
. Tha seo a’ ciallachadh gu bheil seilbh againn ri fhaighinn a leigeas leinn dligheachd an sguabaidh às bog a shuidheachadh. Faodaidh sinn an uairsin an suidheachadh atharrachadh le bhith a’ mìneachadh an togalaich gu soilleir DELETED_AT
taobh a-staigh a 'chlas a tha a' mìneachadh a 'mhodail:
class House extends Model
{
use SoftDeletes;
* The name of the "deleted at" column.
*
* @var string
*/
const DELETED_AT = 'is_deleted';
}
No le bhith a’ mìneachadh dòigh a tha an-còmhnaidh taobh a-staigh a’ chlas anns a bheil sinn airson an sguabadh às bog a riaghladh:
class House extends Model
{
use SoftDeletes;
public function getDeletedAtColumn()
{
return 'is_deleted';
}
}
Ciamar a stiùireadh soft deletes
Gus rianachd a soft deletes
Tha cuid de dhòighean againn rim faighinn, nam measg:
withTrashed()
: gus clàran a chaidh a dhubhadh às a thoirt a-steach gu sealach, gu socair;onlyTrashed()
: Na cuir a-steach ach clàran a chaidh a dhubhadh às gu sealach, airson ùine;restore()
: cuir air ais clàran a chaidh a dhubhadh às;
Tha am buidheann de dhòighean seo air a chleachdadh gus gnìomhachd Soft Delete ann an Laravel a làimhseachadh.
Sgrìobh mi artaigil gu math toinnte air a h-uile càil Soft Delete
$houses = House::withTrashed()->get();
$trashedHouses = House::onlyTrashed()->get();
House::withTrashed()->where('id', 1)->restore();
Clone a Model
Faodaidh tu clòn a dhèanamh air teamplaid le bhith a’ cleachdadh replicate()
. Bidh an toradh mar leth-bhreac den mhodail ann an suidheachadh ùr nach eil idir ann. Tha an eisimpleir a leanas a 'ruith a' mhodh replicate()
gu modail $house
, a 'cruthachadh modail ùr $newHouse
a ghineas le sàbhaladh clàr ùr co-ionann ris an fhear a chaidh a thoirt a-mach a’ cleachdadh find()
.
$house = App\House::find(1);
$newHouse = $house->replicate();
$newHouse->save();
Sàbhail modailean agus dàimhean
Faodaidh tu modail a shàbhaladh agus na dàimhean co-fhreagarrach aige a 'cleachdadh an dòigh push()
. Anns an ath eisimpleir bidh sinn a’ cruthachadh seòrsa ùr de mhodail House
, le ainm Villa Cleopatra
agus seòladh na làraich togail Mulberry Street
: a’ toirt a-steach modh push() air an Model House
rachamaid a shàbhaladh an dà chuid Model House
che il Model WorkSite
.
class House extends Model
{
public function worksite()
{
return $this->hasOne('App\WorkSite');
}
}
$house = House::first();
$house->name = "Villa Cleopatra";
$house->worksite->address = 'Mulberry Street';
$house->push(); // This will update both house and worksite record in DB
Mar a gheibh thu na feartan tùsail
Ma tha an dèidh deasachadh clàr Eloquent, ma tha thu airson na luachan tùsail ath-leughadh: faodaidh tu sin a dhèanamh. Gus seo a dhèanamh faodaidh tu an gnìomh a ghairm getOriginal()
$house = App\House::first();
$house->name; //Villa Cleopatra
$house->name = "Villa Giulio Cesare"; // Villa Giulio Cesare
$house->getOriginal('nome') ; //Villa Cleopatra
$house->getOriginal() ; //Original $house record
Mar a nì thu sgrùdadh a bheil am modail air atharrachadh
Gus faighinn a-mach a bheil modail no feart sònraichte air atharrachadh, faodaidh tu an gnìomh a chleachdadh isDirty()
$house = App\House::first();
$house->isDirty(); //false
$house->name = "Villa Giulio Cesare";
$house->isDirty(); //true
Faodaidh tu cuideachd dearbhadh a bheil feart sònraichte air atharrachadh.
$house->isDirty('name'); //true
$house->isDirty('address'); //false
Mar a dh'atharraicheas na feartan
Ma lorgas sinn gu bheil modail air atharrachadh, agus gu bheil sinn airson faighinn a-mach gu mionaideach dè a chaidh atharrachadh, is urrainn dhuinn a dhèanamh leis a’ ghnìomh getChanges()
. Bidh an gnìomh a’ tilleadh sreath leis an liosta de bhuadhan a tha an lùib an atharrachaidh.
$user->getChanges() // [ "name" => "Peter", ]