【发布时间】:2017-04-25 15:13:29
【问题描述】:
我正在为我的 dovecot 数据库创建一个基于 Web 的界面。
我可以很容易地获得数据库中所有虚拟域的列表以及电子邮件和别名的数量。
但是当我尝试加载一个页面来列出特定域下的电子邮件时,它变得很奇怪。
三个简单模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class VirtualDomain extends Model
{
public function emails()
{
return $this->hasMany('App\VirtualUser', 'domain_id');
}
public function aliases()
{
return $this->hasMany('App\VirtualAlias', 'domain_id');
}
}
class VirtualUser extends Model
{
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password',
];
}
class VirtualAlias extends Model
{
//
}
我的默认控制器:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\VirtualDomain;
use App\VirtualUser;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('home', [
'domains' => VirtualDomain::all(),
]);
}
public function domain($name)
{
$domain = VirtualDomain::where('name', $name)->first();
return view('domain', [
'domain' => $domain,
'emails' => VirtualUser::where('domain_id', $domain->id),
]);
}
}
还有几个简单的刀片
home.blade.php
<p>
{{ $domains->count() }} domains
</p>
<table class="table-summary">
<thead>
<tr>
<th>name</th>
<th>emails</th>
<th>aliases</th>
<th class="table-summary-options">options</th>
</tr>
</thead>
<tbody>
@foreach ($domains as $domain)
<tr>
<td><a title="view emails for this domain" href="domain/{{ $domain->name }}">{{ $domain->name }}</a></td>
<td>{{ $domain->emails->count() }}</td>
<td>{{ $domain->aliases->count() }}</td>
<td class="table-summary-options"><a class="ui-action" title="remove this domain" href=""><img src="/img/ui/remove.png" alt="remove"></a></td>
</tr>
@endforeach
</tbody>
</table>
和 domain.blade.php
<p>
<a href="/"><<</a> - {{ $domain->name }} - {{ $emails->count() }} emails
</p>
<table class="table-summary">
<thead>
<tr>
<th>email</th>
<th class="table-summary-options">options</th>
</tr>
</thead>
<tbody>
@foreach ($emails as $email)
<tr>
<td><a title="view aliases for this domain" href="email/{{ $email->email }}">{{ $email->email }}</a></td>
<td class="table-summary-options"><a class="ui-action" title="remove this email" href=""><img src="/img/ui/remove.png" alt="remove"></a></td>
</tr>
@endforeach
</tbody>
</table>
视图在{{ $emails->count() }} - but the@foreach ($emails as $email)`的域下输出正确数量的电子邮件不会循环。
当我修改刀片以简单地使用来自域变量({{ $domain->emails->count() }} 和 @foreach ($domain->emails as $email))的电子邮件时,我得到了正确的计数并且列表被正确填充。
使用 emails 变量时出现什么问题?
【问题讨论】:
标签: laravel-5 eloquent laravel-blade