<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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">=&gt;</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">=&gt;</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">-&gt;</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">-&gt;</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">=&gt;</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">-&gt;</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">-&gt;</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">=&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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 &amp; Ü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

Bu Makaleyi Paylaş