Merhabalar kolay gelsin ilanlar diye bir tablom var bu tablodaki herhangi bir satırda değişiklik olduğunda yani nereden olursa olsun o satırın isActive değerini 0 durumuna getirmek istiyorum bu mümkün müdür ?
Model update edildiğinde güncelleme yapmak
TurgutEfeYksel Kullandığınız Laravel sürümü kaç?
https://laravel.com/docs/8.x/eloquent#observers
https://laravel.com/docs/8.x/events
Bu sayfaları incelemenizde fayda var.
- Düzenlendi
Model event ile de yapabilirsiniz zannediyorum.
Updating ya da Updated ateslendikten sonra, o modelin isActive sütununu guncelletirsiniz.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class ExampleModel extends Model
{
/**
* The "booted" method of the model.
*
* @return void
*/
protected static function booted()
{
static::updating(function ($ExampleModel) {
// Burada istedigin sütuna tekrar islem
// yaptirabilirsin
});
}
}
Model event içinde olmaz o.Aynı modele gidiyorsunuz @mgsmus un dediği gibi loopa girecektir..Burada aslında bir attribute tanımlayıp kullanıcı bilgisine göre bir şey yapılabilir.
- Düzenlendi
mgsmus Laravel 8 kullanıyorum.
Birde başka bir sorum mevcut. Şimdi kategoriler diye bir tablom var içeriği böyle https://prnt.sc/10cvkl6 ben bir kategoriye gidince ona ait olan ilanları listeleyebiliyorum burada bir sorun yok fakat bu kategorinin alt kategorilerinin ilanlarınıda getirmek istiyorum bunun kolaylaştırmak için bir eloquent sorgusu varmı yoksa ben foreach ile devammı edeyim
TurgutEfeYksel Şöyle bir deneyin, oluşacak etkiyi tam kestiremedim:
protected static function booted()
{
static::updating(function($model) {
if($model->isDirty() {
$model->isActive = 0;
});
});
}
mgsmus Sağolun hocam eve geçtiğimde deneyeceğim.
TurgutEfeYksel Birde başka bir sorum mevcut. Şimdi kategoriler diye bir tablom var içeriği böyle https://prnt.sc/10cvkl6 ben bir kategoriye gidince ona ait olan ilanları listeleyebiliyorum burada bir sorun yok fakat bu kategorinin alt kategorilerinin ilanlarınıda getirmek istiyorum bunun kolaylaştırmak için bir eloquent sorgusu varmı yoksa ben foreach ile devammı edeyim
bu sorumada cevap verebilirseniz çok sevinirim
TurgutEfeYksel Kategori ile ilgili olarak şu paketi kullanabilirsiniz: https://github.com/BlueM/Tree
// Önce tüm kategorileri çekeceksiniz
$data = Category::select('id', 'parentId')
->get()
->toArray();
$tree = new BlueM\Tree($data, [
'rootId' => null,
'id' => 'id',
'parent' => 'parentId'
]);
// Burada listeleme yapacağınız kategoriyi seçiyorsunuz, mesela id'si 5 olan kategori
$category = $tree->getNodeById(5);
// Bu seçtiğiniz kategori ve altında yer alan tüm kategori id'lerini recursive toplayan dizi olacak
$ids = [];
foreach($category->getDescendantsAndSelf() as $node) {
$ids[] = $node->getId();
}
// Artık elinizde [5, 8, 13, 24] gibi kategoriyi ve tüm alt kategori id'lerini barındıran bir dizi var
// Bununla kategorisi olan modelleri çekebilirsiniz. Mesela:
$products = Product::whereIn('category_id', $ids)
->paginate();
Dokümanlara bakarak yazdım, hatalı yer olabilir.
mgsmus Merhabalar hocam bu paketle en alttaki kategorinin üst kategorilerini nasıl alırım acaba dökümanlara baktımda bulamadım ?
- Düzenlendi
TurgutEfeYksel Şu şekilde:
// Üst kategorileri (En üste kadar hepsi)
$ancestors = $node->getAncestors();
// Üst kategorileri ve kendisi (En üste kadar hepsi)
$ancestorsPlusSelf = $node->getAncestorsAndSelf();
Tüm özellikler:
// Tüm ana kategoriler (yani parent_id null ya da 0 olanlar)
$rootNodes = $tree->getRootNodes();
// Tüm kategoriler
$allNodes = $tree->getNodes();
// Kategori (id değerine göre)
$node = $tree->getNodeById(12345);
// Bir üst kategori
$parentNode = $node->getParent();
// Kategori ile aynı seviyedeki diğer kategoriler
$siblings = $node->getSiblings();
// Kategori ile aynı seviyedeki diğer kategoriler ve kendisi
$siblings = $node->getSiblingsAndSelf();
// Aynı seviyedeki, bir önceki kategori
$precedingSibling = $node->getPrecedingSibling();
// Aynı seviyedeki, bir sonraki kategori
$followingSibling = $node->getFollowingSibling();
// Alt kategorileri var mı?
$bool = $node->hasChildren();
// Kaç tane alt kategorisi var?
$bool = $node->countChildren();
// Alt kategoriler (sadece bir seviye)
$children = $node->getChildren();
// Üst kategorileri (En üste kadar hepsi)
$ancestors = $node->getAncestors();
// Üst kategorileri ve kendisi (En üste kadar hepsi)
$ancestorsPlusSelf = $node->getAncestorsAndSelf();
// Alt kategorileri (En alta kadar hepsi)
$descendants = $node->getDescendants();
// Alt kategorileri ve kendisi (En alta kadar hepsi)
$descendantsPlusSelf = $node->getDescendantsAndSelf();
mgsmus Denediniz mi bu yöntemi? @TurgutEfeYksel sonucu merak ettim sahsen
BoraN7 Evet çalıştı. Örnek : https://prnt.sc/10of3sw
mgsmus Teşekkürler hocam.
mgsmus Geçenlerde bir Github kodunu incelerken Model Observer üzerinde updating eventi sonrasında bazı sütunlarda değişiklik yaptı. İşlemin sonunda $model->saveQuietly();
diye bir şey kullandı hocam. Sanırım işlem sonrasında tekrar event oluşmasını engelliyor bu şekilde.
Bu senaryoda çözüm olur mu bilmiyorum ama, alternatif bilgi olsun diye buraya bırakmış olayım
BoraN7 Teşekkür ederim