Как создать отношения в Laravel - PullRequest
0 голосов
/ 02 января 2019

Я новичок в laravel, у меня проблемы с подключением этих таблиц: plans, users и loans даже после чтения документов,

У меня есть plans таблицы, которые имеют все мои планы, затем у меня есть users таблица и loans таблица, моя таблица loans имеет user_id и plan_id, все, что я хочу, это чтобы получить записи для plans и users в модели loan.

Loanplan.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Loanplan extends Model
{
    //
    protected $fillable = [
        'title',
        'amount',
        'interest',
        'repayment_month',
        'status',
    ];


    public function loan()
    {
        return $this->belongsTo('App\loan');
    }


}

модель моего кредита:

Loan.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Loan extends Model
{
    protected $table = 'loans';
    //
    protected $fillable = [
        'id',
        'user_id',
        'loanplan_id',
        'payment_made',
        'status',
    ];


    public function user()
    {
        return $this->belongsTo('App\User');
    }

    public function loanplan()
    {
        return $this->belongsTo('App\Loanplan');
    }    
}

Я хочу получить все кредитные планы и users записи таблицы с plan_id и user_id как иностранные соответственно в моем LoanController.

Ответы [ 4 ]

0 голосов
/ 02 января 2019

Прежде всего, добавьте protected $table = 'plans'; к вашей модели Loanplan, так как имя таблицы 'планирует'

Модель Loanplan

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Loanplan extends Model
{
    protected $table = 'plans';
    protected $fillable = [
        'title',
        'amount',
        'interest',
        'repayment_month',
        'status',
    ];


    public function loan()
    {
        return $this->hasOne('App\loan'); // or hasMany 
    }


}

?>

Модель займа

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Loan extends Model
{
    protected $table = 'loans';
    //
    protected $fillable = [
        'id',
        'user_id',
        'loanplan_id',
        'payment_made',
        'status',
    ];


    public function user()
    {
        return $this->belongsTo('App\User');
    }

    public function loanplan()
    {
        return $this->belongsTo('App\Loanplan');
    }    
}

?>

добавить это к пользовательской модели

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
 public function Loan()
    {
        return $this->hasOne('App\Loan'); // or hasMany
    } 
}
?>
0 голосов
/ 02 января 2019

Loanplan.php отсутствует переменная protected $table = "plans"

Тот же файл,

public function loan()
{
    return $this->belongsTo('App\loan');
}

отношение должно иметь значение hasOne или hasMany, не принадлежащее To.

Кроме того,Название класса должно иметь Заем с большой буквы L.

public function loan()
{
    return $this->...('App\Loan');
}
0 голосов
/ 02 января 2019

Мне кажется, проблема в настройке имени таблицы loans в модели Loanplan.

В соответствии с вашими описаниями вам потребуется следующая настройка:

  • A User может иметь доступ к одному или нескольким Loan s.

    users 1 --- м plans

  • A Loan принадлежит Loanplan // здесь я использую Loanplan, потому что это название вашей модели.

    loans 1 --- м plans

Итак, это значит:

User.php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $table = 'users';

    //

    protected $fillable = [
        'id',
        // 
    ];


    public function loans()
    {
        return $this->hasMany(Loan::class);
    }

    //

}

Loan.php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Loan extends Model
{
    protected $table = 'loans';
    //
    protected $fillable = [
        'id',
        'user_id',
        'loanplan_id',
        //
    ];

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function plan()
    {
        // Notice that here I'm specifying the foreign key:
        return $this->belongsTo(Loanplan::class);
    }

    //

}

Loanplan.php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Loanplan extends Model
{
    protected $table = 'plans';

    //

    protected $fillable = [
        'id',
        // 
    ];


    public function loans()
    {
        return $this->hasMany(Loan::class);
    }

    //

}

Таким образом, вы можете получить доступ к информации в вашем LoanController.php:

LoanController.php

public function myCoolMethod()
{
    // get a user
    $user = User::first();
    // access his/her loans
    $loans = user->loans;

    //

    // get a loan plan
    $plan = Loanplan::first();
    // access its loans
    $loans = plan->loans;

    //
}

Я настоятельно рекомендую вам прочитать Документацию Laravel относительно взаимоотношений, а также курс по проектированию баз данных . Хорошего дня, приятель.

0 голосов
/ 02 января 2019

Во-первых, вы должны проверить, запрашивает ли модель уже созданную вами таблицу.Laravel автоматически получит доступ к таблице на основе имени вашего класса.

Обратите внимание, что мы не указали Eloquent, какую таблицу использовать для нашей Flight модели.По соглашению, "случай змеи", имя класса во множественном числе будет использоваться в качестве имени таблицы, если явно не указано другое имя.Таким образом, в этом случае Eloquent будет предполагать, что модель Flight хранит записи в таблице flights.

Вы можете прочитать ее из этой документации

Во-вторых, убедитесь, что вы называете правильный класс.Начиная с Loanplan.php в методе loan() он не использует заглавные буквы для первой буквы.

В-третьих, попробуйте указать внешний ключ и первичный ключ .Вы также можете проверить, как это сделать, в документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...