2016-12-01 4 views
2

最近Laravelの学習を開始しましたが、私はまだそれを理解しようとしています。だから、私:)私はこれ書き換えるための方法を見つけるためにしようとしていますLaravel 5.3のブレードファイル内にメソッドを作成する方法

判断する前にこの心に留めてください:メソッドで

<a href="{{ url('clients/'. $campaign->client_id) }}">{{ App\Client::find($campaign->client_id)->name }}</a> 

を、私は内部のClient::find()を行う必要がありませんビュー。

私はこれをやってみました:コントローラーに...

private function getClientName($id) 
{ 
    $clientName = Client::find($id)->name; 
    return view('campaigns.index', compact('clientName')); 
} 

とビューの内側法と呼ばれるが、それはうまくいきませんでした、と私は今何かを考えることはできません。

提案がありますか?

答えて

2

コンポーザを使用してヘルパーファイルを作成できます。動作させるには、composer.jsonファイル内で自動ロードする必要があります。作成したヘルパーファイルへのパスとともに「ファイル」を追加する必要があります。

これを実行したら、ヘルパーファイルに通常の機能を追加することができます。このように見えるかもしれません。

<?php 

function getClientName($id){ 
    // Add code to get client name 
} 

このようにブレードからアクセスできます。

<a href="{{ url('clients/'. $campaign->client_id) }}">{{ getClientName($campaign->client_id) }}</a> 

私は何を示唆してきたことは動作するはずですが、それをやってのよりLaravelの方法では、次のような何かを行うことができるように適切にあなたの関係を構築することです。

<a href="{{ url('clients/'. $campaign->client->id) }}">{{ $campaign->client->name }}</a> 

私はあなたが必要があると思い関係の種類を示唆するためには、データベースの構造を確認する必要があると思いますが、あなたは文書で探しているものを見つけることができるはずです。 https://laravel.com/docs/5.3/eloquent-relationships

編集:あなたのキャンペーンテーブルにclient_idがあるように見えるので、あなたのキャンペーンはクライアントの「BelongsTo」になる可能性があります。一方、クライアントには "HasMany"キャンペーンがあります。この用語は、このマニュアルを手助けするかもしれません。

+0

これは私が探していたものです: '{{ $campaign->client->name }}' 私のキャンペーンモデルは 'public function client() { return $ this-> belongsTo( 'App \ Client');を持っています。 } ' –

+0

私はすでにクライアントとキャンペーンの関係をしていましたが、ここに投稿する前に何度も試してみましたが、なぜ正しく動作しないのか理解できません...私は私の心を失っていると思います!これは私が得るエラーです: '未定義のプロパティ:イルミネーション\データベース\ Eloquent \関係\ BelongsTo :: $ name' –

+0

Oohhh、私はついにそれがうまくいきませんでした!!!!!私はこれをやっていました: '$ campaign-> client-> name'の代わりに' $ campaign-> client() - > name'感謝万円!これは、Eloquent Relationships「{{ $campaign->client->name }} ' –

3

ことを行うには、コントローラを使用します。

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Campaign extends Model 
{ 
    /** 
    * Get the user that owns the phone. 
    */ 
    public function client() 
    { 
     return $this->belongsTo('App\Client'); 
    } 
} 

<a href="{{ url('clients/'. $campaign->client_id) }}">{{ $clientName }}</a> 

Laravelでこれを行うためのもう一つの良い方法は、関係を使用することです:あなたのブレードで次に

<?php 

namespace App\Http\Controllers; 

use Illuminate\Routing\Controller; 
use App\Client; 

class Clients extends Controller 
{ 
    public function index() 
    { 
     // You must have campaign here somehow 
     $campaign = whateverYouNeed(); 

     // Then find the client and get the name 
     $clientName = Client::find($campaign->client_id)->name; 

     // And pass them both to your view 
     return view('clients', compact('campaign', 'clientName')) 
    } 
} 

次に、あなたのブレードでそれらを使用するだけです:

<a href="{{ url('clients/'. $campaign->client_id) }}">{{ $campaign->client->name }}</a> 
+0

ありがとうございます。これは、$ idをindex()のパラメータとして渡すことができないことです。 $ idは実際にはclient_idですが、ここでは '$ campaign-> client_id'の中に入るまでわかりません –

+0

しかし、あなたはコントローラを介してあなたのビューにキャンペーンを渡しましたか?だからあなたはそれにアクセスしている。方法を示すために編集されました。 –

+0

@MattE。あなたがビューの中に入るまで、あなたはclient_idを知らないということはどういう意味ですか?この値はどのようにして決定されますか? – Birdman

関連する問題