我的应用程序用户,销售和计划中有3个模型,当我为每个客户呈现销售时(由于存储)我只获得与该销售相关的其他用户和模型的ID(如客户经理,所有者,计划),现在我尝试使用这些ID内部刀片来获取基于ID和模型的名称或其他行。这是show函数:
public function show($id) {
$user = User::find($id);
$sales = Sale::where('customer_id', '=', $id)->get();
return view('profiles.customer', ['user' => $user, 'sales' => $sales]);
}
在刀片中,我获得了所有这些销售:
@foreach ($sales as $sale)
<li>
<i class="fa fa-home bg-blue"></i>
<div class="timeline-item">
<span class="time"><i class="fa fa-clock-o"></i> {{$sale->created_at->format('g:ia, M jS Y')}}</span>
<h3 class="timeline-header"><a href="#">{{$user->name}}</a> became a customer</h3>
<div class="timeline-body">
<p>Date: {{$sale->sold_date}}</p>
<p>Price: {{$sale->sale_price}}</p>
</div>
</div>
</li>
@endforeach
因此,在每条记录中我都喜欢&#34; account_manager_id&#34;,&#34; agent_id&#34;,&#34; owner_id&#34;,&#34; plan_id&#34;。
目前我通过在Sale模型类中添加公共静态函数(这适用于用户,同样具有Plan模型的功能)来解决这个问题:
public static function getUser($id) {
return User::where('id', $id)->first();
}
我在Blade中使用它是这样的:
Account manager: {{$sale->getUser($sale->account_mgr_id)->name}}
这是最安全,最好的方法吗?或者有一些我在这里可以忽略的东西?
答案 0 :(得分:1)
我认为你可以使用Eloquent relationships。举个例子,你应该在用户模型中定义关系:
<?php
class User extends Eloquent {
public function sales() {
return $this->hasMany(Sale::class, 'customer_id');
}
}
然后,只要您需要获得该用户的销售(条目,通过customer_id列相关),只需执行
<?php
$user = User::find($id);
$sales = $user->sales;
当您必须打印出具有销售额的用户列表时,这非常有趣,例如
<?php
public function showUsersWithSales() {
$users = User::with('sales')->get();
return view('users-with-sales', compact('users'));
}
users-with-sales.blade.php示例:
@foreach ($users as $user)
User: {{ $user->name }}<br>
Sales:<br>
@foreach ($user->sales as $sale)
{{ $sale->amount }} {{ $sale->currency }} @ {{ $sale->created_at }}<br>
@endforeach
<hr>
@endforeach
它会打印所有用户的销售金额和货币,然后是创建日期。 此示例考虑到您的用户模型具有名称属性,而您的销售模型在数据库中包含金额,货币,created_at和customer_id字段。
要扭转行动,说你有销售并想知道是谁做的,只需简单地定义一个关系!
<?php
class Sale extends Eloquent {
public function customer() {
return $this->belongsTo(User::class, 'customer_id');
}
}
希望有所帮助!
答案 1 :(得分:1)
您需要在销售模型中添加关系。
class Sales extends Eloquent {
.....
.....
public function accountManager() {
return $this->hasMany('App\User', 'account_manager_id');
}
public function agents() {
return $this->hasMany('App\User', 'agent_id');
}
public function owner() {
return $this->hasOne('App\User', 'owner_id');
}
}
现在$sales->agents
会在agent_id
表中为id
User
用户提供。
根据需要更新hasOne
,hasMany
关系。 Laravel Documentation
从您的刀片模板中,您可以访问您的AccountManager
@foreach($sales->accountManager as $manager)
Name: {{ $manager->name}}
@endforeach
答案 2 :(得分:1)
Eloquent Relationship是你的朋友https://laravel.com/docs/5.2/eloquent-relationships,你可以轻松解决问题。
建议从视图中删除所有这些功能访问和控制,并将其放在其他位置。这对你来说是个好习惯,所以你可以避免臭名昭着的胖视图。