是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
表格记录。
答案 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 --- mplans
Loan
属于Loanplan
// //我在这里使用Loanplan
,因为这是您的型号名称。
loans
1 --- mplans
所以,这意味着:
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
表中。
第二,请确保您呼叫正确的班级。从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
}
}
?>