【问题标题】:Laravel 5.2 @foreach - invalid argument suppliedLaravel 5.2 @foreach - 提供的参数无效
【发布时间】:2016-10-28 10:02:15
【问题描述】:

我正在尝试显示来自 2 个相关数据库表的数据,但我收到了 @foreach - 提供的参数无效错误。有谁知道我做错了什么并知道如何解决它?

这是我的控制器功能

public function index()
{
   return view('Voorraad.index', [
    'voorraads' => Voorraad::all(),
    'Products' => Producten::all()
    ]);
}

如你所见,我有一个模型“voorraad”和“producten”,它在数据库中的 1:n 关系“producten”在 1 侧,“voorraad”在它们之间关系的 n 侧,

这是我的“voorraad”模型

class Voorraad extends Model

// Model Voorraad has the attributes, Aantal and Id;

 {
  protected $fillable = ['voorraadId','aantal'];
  protected $table = 'Voorraad';

public $timestamps = false;


/*
 * Voorraad can have multiple products;
*
 */

 public function Product()
 {
    return $this->HasMany('App\Producten', 'Producten_ProductenId');
 }
}

这是我的“Producten”模型

class Producten extends Model
 {

// model producten holdes the attribues naam, inkoopprijs, verkoopprijs, 

protected $fillable = ['productId','naam','inkoopprijs','verkoopprijs'];
protected $table = 'Producten';

public $timestamps = false;


//producten Belongs to "voorraad"

public function voorraad()
{
    return $this->belongsTo('App\Voorraad', 'producten_productenId');
}
}

这是我想要在其上显示我的数据库模型的视图:

@foreach($voorraads as $voorraad)

     <tr>
        <td>{{$voorraad->voorraadId}}</td>
        <td>{{$voorraad->aantal }}</td>
           @foreach($voorraad->producten as $products)
           <td>{{ $products->Naam }}</td>
           <td>{{ $products->InkoopPrijs }}</td>
           <td>{{ $products->VerkoopPrijs  }}</td>
          @endforeach
        <td></td>
        <td></td>
     </tr>
  @endforeach

This is the dd of $voorraads

 This is my migration for the voorraad Table

 public function up()
{
    Schema::create('voorraad', function(blueprint $table)
    {
          $table->increments('id');
          $table->string('naam');
          $table->foreign('Locaties_Id')
          ->reference('Id')
          ->on('locaties')
          ->onDelete('cascasde');
          $table->foreign('Producten_Id')
          ->reference('Id')
          ->on('producten')
          ->onDelete('cascade');
    });
}

这是我对 producten 表的迁移

 public function up()
{
    Schema::create('producten', function(blueprint $table)
    {
        $table->increments('id');
        $table->decimal('inkoopprijs', '10, 2');
        $table->decimal('verkoopprijs', '10, 2');
        $table->foreign('Fabrieken_Id')
        ->reference('Id')
        ->on('fabrieken')
        ->onDelete('cascasde');
    });
}

【问题讨论】:

  • 除非提供循环的实际数据,否则几乎不可能判断 foreach 出了什么问题。换句话说,转储$voorraads 并将其添加到问题中。

标签: php laravel-5.2


【解决方案1】:

问题出在 Voorraad 模型中,您在其中定义了关系:

public function Product()
{
   return $this->HasMany('App\Producten', 'Producten_ProductenId');
}

但是在视图中你尝试通过调用来访问关系

@foreach($voorraad-&gt;producten as $products)

如果您更改模型中的方法,它应该可以工作

public function producten()
{
   return $this->HasMany('App\Producten', 'Producten_ProductenId');
}

【讨论】:

  • 感谢@trommelaap 的回复,但是当我更改方法名称时,我又遇到了另一个错误,但这次我收到了这个错误:codeSQLSTATE[42S22]: Column not found: 1054 Unknown column ' 'where 子句'中的 Producten.Producten_Id' (SQL:select * from Producten where Producten.Producten_Id 为空,Producten.Producten_Id 不为空)你知道我需要改变什么吗到我的数据库?
  • Voorraad 模型中 producten 方法的第二个参数应该是与 Voorraad 表相关的 producten 表中的外键列的名称。也许voorrraad_id?请发布 2 个表的迁移。
  • 我已经将迁移放在问题@trommelaap 中,Producten 没有外键,但 voorraad 有 producten_id 的外键,我想展示的是带有“anantal”在我的 voorraad 索引页面上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
  • 2016-10-09
  • 2018-12-09
  • 1970-01-01
  • 2015-06-29
  • 2022-01-27
  • 2018-02-26
相关资源
最近更新 更多