鉴于以下10月CMS插件模型:
Schema::create('iaff106_cellphone_cellphones', function($table){
$table->engine = 'InnoDB';
$table->increments('id');
$table->integer('user_id')->unsigned()->nullable()->index();
$table->string('label');
$table->string('phone')->nullable()->index();
$table->integer('provider_id')->nullable();
$table->boolean('is_txtable')->default(true);
$table->boolean('is_published')->default(false);
$table->timestamps();
});
Schema::create('iaff106_cellphone_providers', function($table){
$table->engine = 'InnoDB';
$table->increments('id');
$table->string('name');
$table->string('slug')->index();
$table->string('mail_domain')->nullable();
$table->timestamps();
});
提供商的关系:
public $belongsToMany = ['IAFF106\CellPhone\Models\Cellphone', 'foreignKey' => 'provider_id'];
手机关系:
public $hasOne = ['IAFF106\CellPhone\Models\Provider'];
我想选择手机和相关服务提供商来获取“手机”和“姓名”字段。
在我的组件中,我尝试过:
public function onRun()
{
$this->cellphone = $this->page['cellphone'] = $this->loadCell();
}
protected function loadCell()
{
$slug = $this->propertyOrParam('idParam');
$cellphone = Cellphone::isPublished()->where('id', '=', $slug)->first();
$this->provider = $this->page['provider'] = $cellphone->provider;
return $cellphone;
}
$ this->手机拥有我想要的手机数据,但我无法弄清楚如何访问提供商的名称信息。
如何从视图中的两个模型加载和访问数据?
我在我看来试过这个:
<ul>
<li>{{ cellphone.phone }} {{ provider.name }} </li>
<li>Try Again </li>
<li>{{ cellphone.phone }} {{ cellphone.provider.name }} </li>
</ul>
{{cellphone.phone}}显示正常,但我无法获得提供商名称。
答案 0 :(得分:3)
好的,我的解决方案是你的模型中的一个问题
你需要把
public $belongsTo = [
'provider' => ['IAFF106\CellPhone\Models\Provider', 'foreignKey' => 'provider_id']
];
而不是
public $hasOne = ['IAFF106\CellPhone\Models\Provider'];
这是CellPhone.php的模型代码
<?php namespace IAFF106\CellPhone\Models;
use Model;
/**
* CellPhone Model
*/
class CellPhone extends Model
{
/**
* @var string The database table used by the model.
*/
public $table = 'iaff106_cellphone_cell_phones';
/**
* @var array Guarded fields
*/
protected $guarded = ['*'];
/**
* @var array Fillable fields
*/
protected $fillable = [];
/**
* @var array Relations
*/
public $belongsTo = [
'provider' => ['IAFF106\CellPhone\Models\Provider', 'foreignKey' => 'provider_id']
];
public function scopeIsPublished($query)
{
return $query
->whereNotNull('is_published')
->where('is_published', '=', 1);
}
}
请在10月CMS检查doc的关系 https://octobercms.com/docs/database/model#relationships
如果您指定手机有一个提供商,那么您的提供者表格中必须有您的手机,您可以按照自己的方式进行管理,但您定义关系的方式必须与doc中指定的一样。
组件和视图代码就好了。
答案 1 :(得分:0)
感谢Anand Patel找到关系中的主要问题。
为了方便其他人,我在这里再次发布简单但关键的代码片段。 我确实让它像这样工作。
在手机型号中:
/**
* @var array Guarded fields
*/
protected $guarded = [];
/**
* @var array Relations
*/
public $belongsTo = [
'user' => ['RainLab\User\Models\User',
'foreignKey' => 'user_id'],
'provider' => ['IAFF106\CellPhone\Models\Provider',
'foreignKey' => 'provider_id']
];
在提供者模型中:
public $hasMany = ['cellphone' => ['IAFF106\CellPhone\Models\Cellphone',
'foreignKey' => 'provider_id']
];
在组件中我做了:
$cellphones = Cellphone::where('user_id', '=', $this->userid)->get();
在视图中我做了:
<ul>
{% for cellphone in cellphones %}
<li>
{{ cellphone.label }} : <strong>{{ cellphone.phone }} </strong>
<sub>{{ cellphone.provider.name }}</sub>
</li>
{% endfor %}
</ul>
我最初的主要问题是我格式化关系数组的方式。我需要指定关系数组的键。比较我的第一篇文章,看看我的意思。