代码之家  ›  专栏  ›  技术社区  ›  Alcantara

如何在laravel中建立关系

  •  0
  • Alcantara  · 技术社区  · 6 年前

    我是laravel的新手,尝试连接此表时遇到问题: plans , users loans 即使在阅读了文档之后,

    计划 有我所有计划的桌子,然后我有一个 表和 贷款 贷款 user_id plan_id ,我只想把这些记录拿出来 计划 使用者 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');
        }    
    }
    

    表格记录 计划编号 分别在我的 LoanController

    4 回复  |  直到 6 年前
        1
  •  1
  •   Kenny Horna    6 年前

    我认为问题在于产品的定制 loans 表中的表名 Loanplan

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

    • A. User 可以访问一个或多个 Loan s

      users plans

    • A. 贷款 属于 //这是我用的 贷款计划 因为那是你的模特名。

      1--米 计划

    因此,这意味着:

    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);
        }
    
        //
    
    }
    

    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 :

    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
  •  1
  •   Kenny Horna    6 年前

    Loanplan.php 他错过了 protected $table = "plans"

    同一个文件,

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

    此外,类的名称应使用大写字母L进行贷款。

    public function loan()
    {
        return $this->...('App\Loan');
    }
    
        3
  •  0
  •   DerDjamel    6 年前

    首先添加 protected $table = 'plans'; 由于表名为“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
        } 
    }
    ?>
    
        4
  •  0
  •   Kenny Horna    6 年前

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

    请注意,我们没有告诉雄辩的哪张表用于我们的测试 Flight 模型按照惯例,除非明确指定了另一个名称,否则类的复数名“snake-case”将用作表名。因此,在这种情况下,雄辩者将承担 航班 模型将记录存储在 flights 桌子

    你可以从报纸上读到 this documentation

    其次,确保你给正确的班级打电话。从…起 Loanplan.php loan() 方法它的第一个字母不使用大写。

    第三,试着陈述 外键 主键 . 您还可以在文档中检查如何执行此操作。