0

我有 1 个表:“交易”。
1 表“员工”。

我正在尝试从 Transactions 上下文中的表“Employee”中检索一些信息,以便使用“Employee”中的 id 填充下拉菜单(因为每个事务都需要链接到 Employee)。此时,当我运行我的代码时,我没有得到任何结果。

我有一个引用“id”的外键“codigo_referido_id”(来自员工表)。

交易模型

class Transaction extends Model
{
    use HasFactory;

    public function employees(){

       return $this->belongsTo(Employee::class , 'codigo_referido_id');

    }
}

员工模型

class Employee extends Model
{
    use HasFactory;

    protected $table = 'employees';
    public $timestamps = true;

    protected $fillable = [
        'nombre',
        'codigo_referido'
    ];


}

事务控制器

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create(Transaction $transaction)
    {
        $transactions = Transaction::all();
        

        return view('transaction.create' , compact('transactions'));
    }

刀片模板(目前我只有这个来检查结果):

{{ dd($transactions->employees()) }}

尽管如此,它会用员工填充 Select 字段。

此时我收到此错误:

BadMethodCallException 方法 Illuminate\Database\Eloquent\Collection::employees 不存在。

有人能帮我吗?

问候

4

2 回答 2

1

Transaction::all()返回一个集合,即使该集合仅包含一条记录。employees()是一个实例上的方法,Transaction因此您需要遍历集合并在每次迭代时Transactions调用该方法。employees

举个例子:

@foreach ($transactions as $transaction)
    {{ dump($transaction->employees) }}
@endforeach

请注意,如果您想要实际employees的关系,则需要在没有 as 的情况下调用关系(),否则您将获得BelongsTo关系的实例。

更新

事务控制器.php

public function create()
{
    return view('transactions.create', [
        'employees' => Employee::all()
    ]);
}

public function show(Transaction $transaction)
{
    return view('transactions.create', [
        'transaction' => $transaction->with('employees')
    ]);
}

交易.创建

{{-- loop over all employees --}
@foreach ($employees as $employee)
    {{ $employee->id }}
@endforeach

交易显示

{{-- get the employee associated to the transaction --}}
{{ $transaction->employees }}
于 2021-07-05T17:53:14.877 回答
1

您将所有交易传递给$transactions变量。在您使用的刀片文件中{{ dd($transactions->employees()) }}。问题是模型关系函数应该在模型的每个实例而不是模型集合上运行。$transactionsTransactionmdoel的集合。使用foreach循环遍历它们:

@foreach($transactions as $transaction)
    {{ $transaction->employee() }}
@endforeach
于 2021-07-05T17:53:36.943 回答