2017-03-05 5 views
0

にCodeIgniterのクエリを変換する私はCodeIgniterのLaravelクエリ

$html = array(); 
     $sqltourtypes = 'SELECT * FROM tourtypes ORDER BY nTourTypeID ASC'; 
     $sqltours = 'SELECT * FROM tours WHERE nTourTypeID = ? ORDER BY _kpnID ASC'; 

     $tourtypes = $this->db->query($sqltourtypes)->result(); 
     for($i = 0; $i < count($tourtypes); $i++){ 
      $html[] = '<li><a href="#">'.$tourtypes[$i]->_kftDescription.'</a>'; 
      $tours = $this->db->query($sqltours,array($tourtypes[$i]->nTourTypeID))->result(); 
      if(count($tours)>0){ 
       $html[] = '<ul>'; 
       for($ia = 0; $ia < count($tours); $ia++){ 
        $html[] = '<li>'.$tours[$ia]->tDescription.'</li>'; 
       } 
       $html[] ='</ul></li>'; 
      }else { 
       $html[] = '</li>'; 
      } 
     } 
     return implode('',$html); 

に次のコードを持っている私は最近、Laravelフレームワークに切り替える必要がありました。私はLaravelで質問をすることができませんでした。基本的に私は2つのテーブル、ツアータイプとツアーを持っています。 _kftDescriptionはulタグの下のツアータイプをリストするのに使用され、tDescriptionは特定のグループのツアー名をliタグとしてリストするために使用されます。

クエリを変換しようとすると、常にエラーが発生します。誰も私のコードをCodeIgniterから実装する方法を提案できますか? nTourTypeIDが "1"の場合、ツアータイプ "クルーズ"に属します。希望は理にかなっています。

enter image description here

更新:マイアプリ\のHttp \コントローラ\ BookingsController.phpファイルは、予約のため、この

namespace App\Http\Controllers; 

use App\Models\Bookings; 
use Illuminate\Http\Request; 
use Illuminate\Pagination\LengthAwarePaginator as Paginator; 

use Illuminate\Support\Facades\DB; 
use App\Http\Controllers\Controller; 
use Validator, Input, Redirect ; 
class BookingsController extends Controller { 
    public function index() 
    { 
    $tourTypes = collect(DB::table('tourtypes')->orderBy('nTourTypeID')->get()) 
     ->map(function ($item) { 
      $item->tours = DB::table('tours')->where('nTourTypeID', $item->nTourTypeID)->get(); 

      return $item; 
     }); 

     return view('bookings', compact('tourTypes')); 

    } 

とルートのように見えますが、このようになります(私のルートは私にはないの予約ですルートツアーを持っている):

Route::get('bookings','[email protected]'); 

最後に\ resources \ views \ bookingings \ index.blade.phpファイルはthのように見えます次のとおりです。

@extends('layouts.app') 

@section('content') 
{{--*/ usort($tableGrid, "SiteHelpers::_sort") /*--}} 
@if(count($tourTypes)) 

    <ul> 
     @foreach($tourTypes as $tourType) 
      <li> 
       <a href="#">{{ $tourType->_kftDescription }}</a> 

       @if(count($tourType->tours)) 
        <ul> 
         @foreach($tourType->tours as $tour) 
          <li>{{ $tour->tDescription }}</li> 
         @endforeach 
        </ul> 
       @endif 
      </li> 
     @endforeach 
    </ul> 

@endif 

私はまだエラー

未定義の変数を取得:tourTypes(閲覧: D:XAMPP \ htdocsに\を\リソース\予約\予約\ビュー\ index.blade.php)

私は

$tourTypes = DB::table('tourtypes')->orderBy('nTourTypeID', 'ASC')->get(); 
print_r($tourTypes); 

プリントを書く

を照らし\サポート\コレクションオブジェクト([アイテム:保護] =>アレイ( [0] =>はstdClassオブジェクト([nTourTypeID] => 1 [_kftDescription] => クルーズ[_kftColourID] => 003399 )1 =>はstdClassオブジェクト( [nTourTypeID] => 2 [_kftDescription] => 4WD [_kftColourID] =>)[2] => はstdClassオブジェクト([nTourTypeID] => 3 [_kftDescription] =>パールファーム [ _kftColourID] => 00ccff)

したがって、クエリは機能していますが、ulタグとliタグを使用して値を出力することはできません。

@if(count($tourTypes)) 
    <ul> 
     @foreach($tourTypes as $tourType) 
      <li> 
       <a href="#">{{ $tourType->_kftDescription }}</a> 
       @if(count($tourType->tours)) 
        <ul> 
         @foreach($tourType->tours as $tour) 
          <li>{{ $tour->tDescription }}</li> 
         @endforeach 
        </ul> 
       @endif 
      </li> 
     @endforeach 
    </ul> 
@endif 
+0

どのようなエラーが表示されますか?エラーメッセージはありますか?もしそうなら、それは何を言いますか? – waka

+0

最初に 'Undefinedプロパティ:Illuminate \ View \ Engines \ CompilerEngine :: $ db(ビュー:C:\ XAMPP \ htdocs \予約\リソース\ビュー\予約\インデックス.blad e.php) $ this-> db-> query($ sqltourtypes) - > result(); '$ tourtypes = DB :: table( 'tours') - > get();'これでエラーが発生しました: 'ErrorException in e1cff7d5e9e0d2f02a08975fab510e441de69bc5.php 39行目:定義されていないプロパティ:stdClass :: $ _ kftDescription'単なる無限のさまざまなエラー。 https://laravel.com/docs/4.2/queriesを参照しましたが、クエリを実行できません – hijacker83

+0

指定されたツールを使用しない場合、なぜフレームワークを使用するのですか?ララベルの適切な方法は、モデルと関係を定義することです。コントローラコードははるかに簡単です。 HTMLコードはテンプレートに移動する必要があります。 –

答えて

2

この回答は、Laravelでできることの例を示しています。次に、ファイルresources/views/tours.blade.phpを作成し、次の追加

Route::get('tours', function() { 

    $tourTypes = collect(DB::table('tourtypes')->orderBy('nTourTypeID')->get()) 
     ->map(function ($item) { 
      $item->tours = DB::table('tours')->where('nTourTypeID', $item->nTourTypeID)->get(); 

      return $item; 
     }); 

    return view('tours', compact('tourTypes')); 
}); 

はルートのあなたのURLは次のような何かを行うことができ/toursであると言う

@if(count($tourTypes)) 

    <ul> 
     @foreach($tourTypes as $tourType) 
      <li> 
       <a href="#">{{ $tourType->_kftDescription }}</a> 

       @if(count($tourType->tours)) 
        <ul> 
         @foreach($tourType->tours as $tour) 
          <li>{{ $tour->tDescription }}</li> 
         @endforeach 
        </ul> 
       @endif 
      </li> 
     @endforeach 
    </ul> 

@endif 

上記の例を意志のみを出力ul。このチュートリアルでは、もう少し役立つはずです: https://laracasts.com/series/laravel-5-from-scratch/episodes/5


さらに、@PaulSpiegelはコメントで述べたようにあなたはそれがあなたのルート/コントローラでコードを軽減し、またに役立ちますEloquent広告を使用することがより有益であろう熱心な読み込み。私がいることを仮定している上記で

アプリ/ Tour.php

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Tour extends Model 
{ 
    protected $primaryKey = 'kpnID'; 

    public function Tourtypes() 
    { 
     return $this->belongsTo(Tourtype::class, 'nTourTypeID', 'nTourTypeID'); 
    } 
} 

アプリ/ Tourtype.php

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Tourtype extends Model 
{ 
    /** 
    * The primary key for the model. 
    * 
    * @var string 
    */ 
    protected $primaryKey = 'nTourTypeID'; 

    /** 
    * Tours Relationship 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\HasMany 
    */ 
    public function tours() 
    { 
     return $this->hasMany(Tour::class, 'nTourTypeID', 'nTourTypeID'); 
    } 
} 

:あなたは、次のファイルを作成することができます。これを行うために

ツアーの主キーはkpnIDです。そうでない場合は、変更してください。

Route::get('tours', function() { 

    $tourTypes = \App\Tourtype::with('tours')->get(); 

    return view('tours', compact('tourTypes')); 
}); 

https://laravel.com/docs/5.1/eloquent

https://laravel.com/docs/5.1/eloquent-relationships#one-to-many

https://laravel.com/docs/5.1/blade#defining-a-layout

・ホープ、このことができます:

次に、あなたのルートはのようになります!

+0

ありがとうございます:) – hijacker83

+0

私はそれが動作すると確信していましたが、エラーが発生しました未定義の変数:tourTypes(表示:C:\ XAMPP \ htdocs \予約\リソース\ビュー\予約\ index.blade.php ... bookings \ routes \ module.phpに「Route :: get( 'tours'、function(){'を挿入しますか? – hijacker83

+0

'booking \ routes \ module.php'が何であるか分かりません。あなたがあなたのビューに 'tourTypes'を渡していないので、このエラーが発生していると思います。ビューを戻す( 'bookings.index'、compact( 'tourTypes')); –