尝试将数据提取到视图中,不确定是否正确执行

时间:2015-08-03 12:29:35

标签: laravel

我想让当前登录用户输入年份和期限,并根据从数据库中获取相关记录....当我搜索表单时,似乎无法获取所需数据我收到错误< / p>

"SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'term'
     in where clause is ambiguous (SQL: select * from `users` inner join
    `cat1s` on `users`.`id` = `cat1s`.`user_id` inner join `cat2s` on
    `users`.`id` = `cat2s`.`user_id` inner join `exams` on `users`.`id` =
    `exams`.`user_id` where `users`.`id` = 21 and `term` = 1) "

查看

{{Form::open(['method'=>'GET','route'=>'results'])}}
         <ul>
           <li>{{Form::label('year','year of study')}}
              {{Form::text('year', null, array("placeholder" => "year"))}}
              {{--{{$errors->first('reg_no','<p class = "error">:message</p>')}}--}}
           </li>
           <li>{{Form::label('term','term')}}
               {{ Form::text('term', null, array("placeholder" => "term")) }}
               {{--{{$errors->first('firstname','<p class = "error">:message</p>')}}--}}
           </li>
            <li>
               {{Form::submit('search')}}
            </li>
         </ul>
{{Form::close()}}

路线

Route::get('results', ['as' => 'results', 'uses' => 'Cat1sController@show']);

控制器

public function show()

                {
        $year = Input::get('year');
                $term = Input::get('term');
            $maks=DB::table('users')
                                ->join('cat1s','users.id' , '=', 'cat1s.user_id' )
                                ->join('cat2s','users.id' , '=','cat2s.user_id')
                                ->join('exams','users.id' , '=','exams.user_id' )
                         ->where('users.id','=', Auth::user()->id )                   
                         ->where('term','LIKE',[$term] AND 'year',[$year])
                         ->get();
                         return View::make('pages.result',compact('maks'));
            }

部分pages.result视图

<table>
                               @foreach($maks as $mak)
                                    <tr>
                                        <td> {{$mak->$ENG}}</td>
                                        <td> {{$mak->$MATH}}</td>
                                        <td> {{$mak->$BIO}}</td>
                                        <td> {{$mak->$CHEM}}</td>
                                        <td> {{$mak->$PHY}}</td>
                                        <td> {{$mak->$COMP}}</td>
                                        <td> {{$mak->$MUSIC}}</td>
                                        <td> {{$mak->$ART}}</td>
                                        <td> {{$mak->$TOTAL}}</td>
                                        <td> {{$mak->$AVRG}}</td>
                                        <td> {{$mak->$GRADE}}</td>
                                        <td> {{$mak->$POSTN}}</td>
                                    </tr>
                                 @endforeach
                         </table>

3 个答案:

答案 0 :(得分:1)

改变这个:

->where('term','LIKE',[$term] AND 'year',[$year])

来,这个:

->where('users.term','LIKE',[$term] AND 'your_table.year',[$year])

答案 1 :(得分:1)

您必须添加包含&#39; term&#39;的表格的前缀在你的SQL请求中

 $maks=DB::table('users')
                    ->join('cat1s','users.id' , '=', 'cat1s.user_id' )
                    ->join('cat2s','users.id' , '=','cat2s.user_id')
                    ->join('exams','users.id' , '=','exams.user_id' )
             ->where('users.id','=', Auth::user()->id )                   
             ->where('**table.**term','LIKE',[$term] AND '**table.**year',[$year])
             ->get();

修改1 转储您的数据:

@foreach( $maks as $mak ) { <tr> <?php echo '<pre>'; var_dump($mak); echo '</pre>'; ?> {# rest of your code #} </tr> @endforeach

你有&#34;数组到字符串转换&#34;错误,因为$ mak应该是一个字符串,并且它包含一个或多个数组。 刀片模板:{{$ var}}就像<?php echo $var; ?> 并且您无法回显数组,但您可以重新格式化数据。向我展示$mak的转储,我给你一个片段

答案 2 :(得分:0)

MySQL错误表示您尝试查询的表中有多个名为term的列。因此,请将特定的表名称前缀添加到列名称中users.term


另一个问题是:

->where('term','LIKE',[$term] AND 'year',[$year])

这是完全错误的。