Laravel属于忽略外键

时间:2018-12-19 13:24:50

标签: php laravel

我有两个模型,用户模型和任务模型。

Task.php:

    Dataset<Row> dfSalesTotals = dfSaledetails
            .join(dfProducts, dfSaledetails.col("product_id").equalTo(dfProducts.col("product_id")))
            .groupBy(dfSaledetails.col("product_id"))
            .agg(sum(dfSaledetails.col("amount")).alias("total_amount"))
            .select(dfProducts.col("product_name"), col("total_amount"));
    dfSalesTotals.show();

和User.php:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Task extends Model
{
    //  
   protected $fillable=['text','title','user_id','completed','created_by'];
   public function users()
   {
        return $this->belongsTo(User::class, 'id');
   }

}

我的目标是将每个任务分配给一个用户,以便我可以检索创建该任务的用户的名称。
users表具有id和name列。任务表还具有一个id列。
那么如何获得使用雄辩的关系创建任务的用户的名称呢?

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
    public function tasks()
    {
        return $this->hasMany(Task::class);
    }
}

给予:

App\User::first()->tasks

3 个答案:

答案 0 :(得分:1)

为解决此问题,我将此功能添加到Task.php

 public function users()
   {
        return $this->belongsTo(User::class, 'created_by');
   }

我不应该使用“ id”作为外键。并删除了

 public function tasks()
    {
        return $this->hasMany(Task::class);
    }

来自用户模型。

答案 1 :(得分:0)

您说"My objective here is to have every task assigned to a user...",所以我相信一个任务仅属于一个用户。如果真是这样,那的确是One to Many关系。您应该在user()模型上致电users()而不是Task

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

答案 2 :(得分:0)

问题可能出在您的任务模型中

public function users()
{
   return $this->belongsTo(User::class, 'user_id');
}

我看到了documentation和Laravel使用foreign_key作为第二个参数,而不是primary_key作为第二个参数