如何在laravel中建立关系

时间:2019-01-02 15:31:35

标签: php laravel laravel-5

是laravel的新手,我在尝试连接以下表时遇到问题:plansusersloans,即使在阅读文档后也是如此,

我有一个plans表,其中包含我的所有计划,然后我有一个users表和loans表,我的loans表中有一个user_id和一个plan_id,我想要做的就是为plans模型中的usersloan提取记录。

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_iduser_id为外国的所有贷款计划和LoanController表格记录。

4 个答案:

答案 0 :(得分:1)

Loanplan.php缺少protected $table = "plans"变量

相同的文件

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

关系应该是hasOne或hasMany,而不是归属于。

此外,班级名称的贷款应为大写L。

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

答案 1 :(得分:1)

我认为问题在于loans模型中Loanplan表名的自定义。

根据您的描述,您需要进行以下设置:

  • User可以访问一个或多个Loan
      

    users 1 --- m plans

  • Loan属于Loanplan // //我在这里使用Loanplan,因为这是您的型号名称。
      

    loans 1 --- m 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 Documentation和有关database design的课程。祝你有个好伴侣。

答案 2 :(得分:0)

首先,您必须检查模型是否已经从之前创建的表中查询。 Laravel将根据您的类名自动访问表。

  

请注意,我们没有告知Eloquent将Flight模型使用哪个表。按照约定,除非明确指定其他名称,否则将使用“蛇形”类的复数名称作为表名称。因此,在这种情况下,Eloquent将假设Flight模型将记录存储在flights表中。

您可以从this documentation

进行阅读

第二,请确保您呼叫正确的班级。从Loanplan.php的{​​{1}}方法开始,首字母不使用大写字母。

第三,尝试说明外键主键。您也可以在文档中查看操作方法。

答案 3 :(得分:0)

首先,由于表名是“ plans”,因此将protected $table = 'plans';添加到您的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
    } 
}
?>