【问题标题】:Trying to get column data from pivot table laravel试图从数据透视表 laravel 中获取列数据
【发布时间】:2014-10-15 23:58:02
【问题描述】:

您好,我正在尝试从我的数据透视表中输出某个列。为了向您展示我的尝试,我将首先向您展示我的模型(我的数据透视表是 ordertasks 和 tagtasks):

任务表:

class Task extends \Eloquent {

    // Add your validation rules here
    public static $rules = [
        // 'title' => 'required'
    ];

    // Don't forget to fill this array
    protected $fillable = ['task_name','task_description','hour','difficulty'];

    public function ordertask()
    {   
        //oneToMany
        return $this->hasMany('Ordertask', 'id_task', 'id');
    }

    public function tagtask()
    {   
        //oneToMany
        return $this->hasMany('Tagtask', 'id_task', 'id');
    }


}

标签任务表:

<?php

class Tagtask extends \Eloquent {
    protected $fillable = ['id_tag','id_task'];

    public function task()
    {   
        //manyToOne
        return $this->belongsTo('Task', 'id_task', 'id');
        //return $this->belongsTo('Task');
    }
    public function tag()
    {   
        //manyToOne
        return $this->belongsTo('Tag', 'id_tag', 'id');

    }
}

订单任务表:

<?php

class Ordertask extends \Eloquent {

    // Add your validation rules here
    public static $rules = [
        // 'title' => 'required'
    ];

    // Don't forget to fill this array
    protected $fillable = ['id_order','id_task', 'hour', 'hourprice','id_user', 'createdBy'];

    public function user()
    {   
        //manyToOne
        return $this->belongsTo('User', 'id_user', 'id');
        //return $this->belongsTo('User');
    }

    public function task()
    {   
        //manyToOne
        return $this->belongsTo('Task', 'id_task', 'id');
        //return $this->belongsTo('Task');
    }
}

这是我的 TaskController.php 代码如下:

public function index()
    {
        $Tasks=Task::with('tagtask','ordertask')->get(); 
        return View::make('user.tasks.index', compact('Tasks'));
    }

好的,现在是我想在浏览器上显示 $Task->ordertask['id_user'] 的部分,代码如下:

@if (count($Tasks)) 
<ul>
   @foreach($Tasks as $Task)
   <div class="row">
      <div class="col-md-3">
         <li>
            {{--as a third parameter we need to pass in the id of task, because it needs to be fed to
            our actual user.task.edit route. --}}
            {{link_to_route('user.tasks.edit', $Task['task_name'], array($Task->id))}}
         </li>
      </div>
      <div class="col-md-3">
         <li>   
            {{$Task->ordertask['id_user']}}
         </li>
      </div>
      <div class="col-md-3">
         <li>   
            {{$Task['task_hour']}}
         </li>
      </div>
      <div class="col-md-3">
         <li>
            {{Form::open(array('route'=>array('user.tasks.destroy',$Task->id),
            'method'=>'delete','class'=>'destroy'))}}
            {{Form::submit('Delete')}}
            {{Form::close()}}
         </li>
      </div>
   </div>
   @endforeach
</ul>
@endif

不幸的是,这不起作用,因为我收到以下错误:

Undefined index: id_user

代替:

{{$Task->ordertask['id_user']}}

我也试过这个只是为了看看它给了我什么输出:

{{$Task->ordertask}}

这给了我以下输出:

[{"id":5,"id_order":2,"id_task":1,"hour":63,"hourprice":15,"id_user":5,"createdBy":4,"created_at":"2014-10-13 10:21:33","updated_at":"2014-10-13 10:21:33"}]

很高兴我想从 ordertask 表中输出 id_user。很高兴我在等你的答复。无论如何感谢您的回复。

【问题讨论】:

    标签: php laravel eloquent blade


    【解决方案1】:

    一个任务可以有多个订单任务,所以要显示用户而不是

    {{$Task->ordertask['id_user']}}
    

    你应该使用:

    @foreach ($Task->ordertask as $ot)
     {{ $ot->id_user }}
    @endforeach
    

    【讨论】:

    • 奇怪的是它不起作用,我按照你告诉我的做了。但由于 withPivot() 方法,它并没有进入我的视野。我收到以下错误:调用未定义的方法 Illuminate\Database\Query\Builder::withPivot() 我也有它的屏幕截图:i.imgur.com/GtIfVB7.png 我也检查了 withPivot 方法,但我认为它应该可以工作。但出于某种奇怪的原因,它没有。我还运行过:“php artisan dump-autoload”和“composer dump-autoload”。我这样做只是为了以防万一。但不幸的是,您的代码仍然无法正常工作..
    • @superkytoz 对不起,我没有仔细准备问题,我改变了答案
    猜你喜欢
    • 2021-04-25
    • 2017-10-16
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多