<h2>
Modeller
</h2>
<p>Artık şemalarımıza yaşam katıyor, ilişkileri ve davranışları Modellerimizde tanımlıyoruz.</p>
<p><strong><code>User.php</code></strong><br/>Kullanıcı her şeyin sahibidir.</p>
<div class="highlight js-code-highlight">
<pre class="highlight php"><code><span class="c1">// ... imports</span>
use Illuminate\Database\Eloquent\Relations\HasMany;
class User extends Authenticatable
{
// … traits
<span class="c1">// ... fillable & hidden</span>
<span class="k">public</span> <span class="k">function</span> <span class="n">bankAccounts</span><span class="p">():</span> <span class="kt">HasMany</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="nf">hasMany</span><span class="p">(</span><span class="nc">BankAccount</span><span class="o">::</span><span class="n">class</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">public</span> <span class="k">function</span> <span class="n">categories</span><span class="p">():</span> <span class="kt">HasMany</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="nf">hasMany</span><span class="p">(</span><span class="nc">Category</span><span class="o">::</span><span class="n">class</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">public</span> <span class="k">function</span> <span class="n">budgets</span><span class="p">():</span> <span class="kt">HasMany</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="nf">hasMany</span><span class="p">(</span><span class="nc">Budget</span><span class="o">::</span><span class="n">class</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">public</span> <span class="k">function</span> <span class="n">transactions</span><span class="p">():</span> <span class="kt">HasMany</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="nf">hasMany</span><span class="p">(</span><span class="nc">Transaction</span><span class="o">::</span><span class="n">class</span><span class="p">);</span>
<span class="p">}</span>
}
<p><strong><code>Category.php</code></strong><br/></p>
<div class="highlight js-code-highlight">
<pre class="highlight php"><code><span class="kd">class</span> <span class="nc">Category</span> <span class="kd">extends</span> <span class="nc">Model</span>
{
/* @use HasFactory /
use HasFactory;
<span class="k">protected</span> <span class="nv">$fillable</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1>'user_id'</span><span class="p">,</span>
<span class="s1>'name'</span><span class="p">,</span>
<span class="p">];</span>
<span class="k">public</span> <span class="k">function</span> <span class="n">user</span><span class="p">():</span> <span class="nc">\Illuminate\Database\Eloquent\Relations\BelongsTo</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="nf">belongsTo</span><span class="p">(</span><span class="nc">User</span><span class="o">::</span><span class="n">class</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">public</span> <span class="k">function</span> <span class="n">transactions</span><span class="p">():</span> <span class="nc">\Illuminate\Database\Eloquent\Relations\HasMany</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="nf">hasMany</span><span class="p">(</span><span class="nc">Transaction</span><span class="o">::</span><span class="n">class</span><span class="p">);</span>
<span class="p">}</span>
}
<p><strong><code>Budget.php</code></strong><br/>Burada <code>type</code>'ı bir Enum olarak ve <code>amount</code>'ı yeni MoneyCast ile ele alıyoruz.</p>
<div class="highlight js-code-highlight">
<pre class="highlight php"><code><span class="kd">class</span> <span class="nc">Budget</span> <span class="kd">extends</span> <span class="nc">Model</span>
{
/* @use HasFactory /
use HasFactory;
<span class="k">protected</span> <span class="nv">$fillable</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1>'user_id'</span><span class="p">,</span>
<span class="s1>'name'</span><span class="p">,</span>
<span class="s1>'amount'</span><span class="p">,</span>
<span class="s1>'type'</span><span class="p">,</span>
<span class="p">];</span>
<span class="k">protected</span> <span class="k">function</span> <span class="n">casts</span><span class="p">():</span> <span class="kt">array</span>
<span class="p">{</span>
<span class="k">return</span> <span class="p">[</span>
<span class="s1>'type'</span> <span class="o">=></span> <span class="nc">\App\Enums\BudgetType</span><span class="o">::</span><span class="n">class</span><span class="p">,</span>
<span class="s1>'amount'</span> <span class="o">=></span> <span class="nc">\App\Casts\MoneyCast</span><span class="o">::</span><span class="n">class</span><span class="p">,</span>
<span class="p">];</span>
<span class="p">}</span>
<span class="k">public</span> <span class="k">function</span> <span class="n">user</span><span class="p">():</span> <span class="nc">\Illuminate\Database\Eloquent\Relations\BelongsTo</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="nf">belongsTo</span><span class="p">(</span><span class="nc">User</span><span class="o">::</span><span class="n">class</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">public</span> <span class="k">function</span> <span class="n">transactions</span><span class="p">():</span> <span class="nc">\Illuminate\Database\Eloquent\Relations\HasMany</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="nf">hasMany</span><span class="p">(</span><span class="nc">Transaction</span><span class="o">::</span><span class="n">class</span><span class="p">);</span>
<span class="p">}</span>
}
<p><strong><code>BankAccount.php</code></strong><br/></p>
<div class="highlight js-code-highlight">
<pre class="highlight php"><code><span class="kd">class</span> <span class="nc">BankAccount</span> <span class="kd">extends</span> <span class="nc">Model</span>
{
/* @use HasFactory /
use HasFactory;
<span class="k">protected</span> <span class="nv">$fillable</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1>'user_id'</span><span class="p">,</span>
<span class="s1>'name'</span><span class="p">,</span>
<span class="s1>'balance'</span><span class="p">,</span>
<span class="p">];</span>
<span class="k">protected</span> <span class="k">function</span> <span class="n">casts</span><span class="p">():</span> <span class="kt">array</span>
<span class="p">{</span>
<span class="k">return</span> <span class="p">[</span>
<span class="s1>'balance'</span> <span class="o">=></span> <span class="nc">\App\Casts\MoneyCast</span><span class="o">::</span><span class="n">class</span><span class="p">,</span>
<span class="p">];</span>
<span class="p">}</span>
<span class="k">public</span> <span class="k">function</span> <span class="n">user</span><span class="p">():</span> <span class="nc">\Illuminate\Database\Eloquent\Relations\BelongsTo</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="nf">belongsTo</span><span class="p">(</span><span class="nc">User</span><span class="o">::</span><span class="n">class</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">public</span> <span class="k">function</span> <span class="n">transactions</span><span class="p">():</span> <span class="nc">\Illuminate\Database\Eloquent\Relations\HasMany</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="nf">hasMany</span><span class="p">(</span><span class="nc">Transaction</span><span class="o">::</span><span class="n">class</span><span class="p">);</span>
<span class="p">}</span>
}
<p><strong><code>Transaction.php</code></strong><br/>Kesişme noktası. Kitlesel atama koruması ve casting'e dikkat edin.</p>
<div class="highlight js-code-highlight">
<pre class="highlight php"><code><span class="kd">class</span> <span class="nc">Transaction</span> <span class="kd">extends</span> <span class="nc">Model</span>
{
/* @use HasFactory /
use HasFactory;
<span class="k">protected</span> <span class="nv">$fillable</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1>'user_id'</span><span class="p">,</span>
<span class="s1>'bank_account_id'</span><span class="p">,</span>
<span class="s1>'category_id'</span><span class="p">,</span>
<span class="s1>'budget_id'</span><span class="p">,</span>
<span class="s1>'description'</span><span class="p">,</span>
<span class="s1>'amount'</span><span class="p">,</span>
<span class="s1>'note'</span><span class="p">,</span>
<span class="s1>'date'</span><span class="p">,</span>
<span class="p">];</span>
<span class="k">protected</span> <span class="k">function</span> <span class="n">casts</span><span class="p">():</span> <span class="kt">array</span>
<span class="p">{</span>
<span class="k">return</span> <span class="p">[</span>
<span class="s1>'amount'</span> <span class="o">=></span> <span class="nc">\App\Casts\MoneyCast</span><span class="o">::</span><span class="n">class</span><span class="p">,</span>
<span class="p">];</span>
<span class="p">}</span>
<span class="k">public</span> <span class="k">function</span> <span class="n">user</span><span class="p">():</span> <span class="nc">\Illuminate\Database\Eloquent\Relations\BelongsTo</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="nf">belongsTo</span><span class="p">(</span><span class="nc">User</span><span class="o">::</span><span class="n">class</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">public</span> <span class="k">function</span> <span class="n">bankAccount</span><span class="p">():</span> <span class="nc">\Illuminate\Database\Eloquent\Relations\BelongsTo</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="nf">belongsTo</span><span class="p">(</span><span class="nc">BankAccount</span><span class="o">::</span><span class="n">class</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">public</span> <span class="k">function</span> <span class="n">category</span><span class="p">():</span> <span class="nc">\Illuminate\Database\Eloquent\Relations\BelongsTo</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="nf">belongsTo</span><span class="p">(</span><span class="nc">Category</span><span class="o">::</span><span class="n">class</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">public</span> <span class="k">function</span> <span class="n">budget</span><span class="p">():</span> <span class="nc">\Illuminate\Database\Eloquent\Relations\BelongsTo</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="nf">belongsTo</span><span class="p">(</span><span class="nc">Budget</span><span class="o">::</span><span class="n">class</span><span class="p">);</span>
<span class="p">}</span>
}
<h2>
Ekim ve Doğrulama
</h2>
<p>Yapımızı tanımladıktan sonra, veritabanını oluşturma zamanı.</p>
<p>Öncelikle, yeni seed'lerimizi çağırmak için <code>DatabaseSeeder.php</code> dosyanızı güncelleyin:</p>
<div class="highlight js-code-highlight">
<pre class="highlight php"><code><span class="kd">class</span> <span class="nc">DatabaseSeeder</span> <span class="kd">extends</span> <span class="nc">Seeder</span>
{
use WithoutModelEvents;
<span class="cd">/
* Seed the application's database.
*/</span>
<span class="k">public</span> <span class="k">function</span> <span class="n">run</span><span class="p">():</span> <span class="kt">void</span>
<span class="p">{</span>
<span class="nv">$this</span><span class="o">-></span><span class="nf">call</span><span class="p">(</span><span class="nc">UserSeeder</span><span class="o">::</span><span class="n">class</span><span class="p">);</span>
<span class="nv">$this</span><span class="o">-></span><span class="nf">call</span><span class="p">(</span><span class="nc">CategorySeeder</span><span class="o">::</span><span class="n">class</span><span class="p">);</span>
<span class="nv">$this</span><span class="o">-></span><span class="nf">call</span><span class="p">(</span><span class="nc">BudgetSeeder</span><span class="o">::</span><span class="n">class</span><span class="p">);</span>
<span class="nv">$this</span><span class="o">-></span><span class="nf">call</span><span class="p">(</span><span class="nc">BankAccountSeeder</span><span class="o">::</span><span class="n">class</span><span class="p">);</span>
<span class="nv">$this</span><span class="o">-></span><span class="nf">call</span><span class="p">(</span><span class="nc">TransactionSeeder</span><span class="o">::</span><span class="n">class</span><span class="p">);</span>
<span class="p">}</span>
}
<p>(Factory'leri detaylı bir şekilde gelecekteki bir derste ele alacağız, ama şimdilik, fabrikalarınızın dummy veriler oluşturduğundan emin olun).</p>
<p>Daha sonra, çalıştırın:</p>
<div class="highlight js-code-highlight">
<pre class="highlight shell"><code>php artisan migrate:fresh <span class="nt">--seeder</span>
<p>Artık çalışmanızı Tinker ile doğrulayalım, verilerinizi kontrol etmek için en iyi araçtır.</p>
<div class="highlight js-code-highlight">
<pre class="highlight shell"><code>php artisan tinker
<p>Bir kullanıcıyı ve onun işlemlerini çekmeyi deneyin:</p>
<div class="highlight js-code-highlight">
<pre class="highlight php"><code><span class="nv">$user</span> <span class="o">=</span> <span class="nc">\App\Models\User</span><span class="o">::</span><span class="nf">first</span><span class="p">();</span>
$user->transactions()->get();
<p>Eğer bir Transaction modelleri koleksiyonu görüyorsanız, tebrikler. Fiziksel dünya finansını dijital alanınıza başarıyla mapping ettiniz.</p>
<p>Son olarak, kodunuzu göndermeden önce, stilinizin kusursuz olduğundan emin olalım.</p>
<div class="highlight js-code-highlight">
<pre class="highlight shell"><code>./vendor/bin/pint
<p>İlerlemeye devam edin.</p>
<h2>
🎓 Bu Uygulamayı Oluşturun & Ücretsiz Sertifika Alın
</h2>
<p>Eğer bu kılavuzu faydalı bulduysanız, tamamen sıfırdan tam bir uygulamayı benim ücretsiz kursumla oluşturabilirsiniz.</p>
<p><strong>Ne öğreneceksiniz:</strong></p>
<ul>
<li>🏗️ İleri Düzey Laravel Mimarisi</li>
<li>📊 FilamentPHP ile Dashboard Oluşturma</li>
<li>💰 Kod üzerinde profesyonelce para yönetimi</li>
</ul>
<p><a href="https://www.maiobarbero.dev/courses/personal-finance-with-laravel/" target="_blank" rel="noopener noreferrer"><strong>→ Maiobarbero.dev'deki diğer öğrencilerle katılın</strong></a></p>
Kaynak: Orijinal Makale