我有一个报价模型:
class Quote extends Eloquent {
public function quote_lines() {
return $this->hasMany('QuoteLine');
}
}
还有一个 QuoteLine 模型:
class QuoteLine extends Eloquent {
public function quote() {
return $this->belongsTo('Quote');
}
}
我的这个模型的表是 quote_lines。
Schema:
Schema::create('quote_lines', function($table)
{
$table->increments('id');
$table->integer('quote_id');
$table->string('title');
$table->string('desciption');
$table->integer('quantity');
$table->decimal('unit_price', 5, 2);
$table->timestamps();
});
Schema::create('quotes', function($table)
{
$table->increments('id');
$table->integer('contact_id');
$table->integer('company_id');
$table->timestamps();
});
问题是我似乎无法从我的报价控制器访问报价行:
$quote_lines = Quote::find($id)->quote_lines;
dd($quote_lines);
只返回NULL
关系的方法名称必须采用正确的驼峰式大小写才能使用魔法属性。例如,为了使用,Quote::find($id)->quote_lines
,该方法必须命名quoteLines()
请允许我解释一下:
Calling Quote::find($id)->quote_lines;
激活 Eloquent 类中神奇的 __get 方法。 __get() 调用getAttribute($key)
关于正在检索的财产。所以在这种情况下,它调用getAttribute('quote_lines')
如果键 (quote_lines) 在模型的属性数组中不可用,它将在类中搜索方法。它通过转换密钥来实现这一点camel_case()
。 Laravel camelcase() 方法会将 quote_lines 转换为 quoteLines。然后,它在类中查找名为 quoteLines() 的函数,如果找到,则将其视为关系方法。
因此,关系方法必须写成 quoteLines。 (或任何适合驼峰式大小写的字符串)
public function quoteLines() {
return $this->hasMany('QuoteLine');
}
然后,您可以使用以下任一方式访问此关系Quote::find($id)->quote_lines
or Quote::find($id)->quoteLines
(当使用驼峰式格式时,'quote_lines' 和 'quoteLines' 都将被评估为 'quoteLines'。)
脚注:laravel 中的“驼峰式大小写”指的是这种形式的字符串:heyThereWorld。
第一个字母必须小写,所有后续单词的第一个字母必须大写
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)