gpt4 book ai didi

Laravel 4 - 无法检索一对多关系中的数据

转载 作者:行者123 更新时间:2023-12-02 12:04:04 25 4
gpt4 key购买 nike

我有一个报价模型:

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::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();
});

问题是我似乎无法从我的报价 Controller 访问报价行:

$quote_lines = Quote::find($id)->quote_lines;
dd($quote_lines);

直接返回NULL

最佳答案

关系的方法名称必须采用正确的驼峰式大小写才能使用魔法属性。例如,为了使用 Quote::find($id)->quote_lines,该方法必须命名为 quoteLines()

请允许我解释一下:

调用 Quote::find($id)->quote_lines; 会激活 Eloquent 类中神奇的 __get 方法。 __get() 对正在检索的属性调用 getAttribute($key)。因此在本例中,它调用 getAttribute('quote_lines')

如果键 (quote_lines) 在模型的属性数组中不可用,它将在类中搜索方法。它通过 camel_case() 转换 key 来实现此目的。 Laravel 的camel_case() 方法会将 quote_lines 转换为 quoteLines。然后,它在类中查找名为 quoteLines() 的函数,如果找到,则将其视为关系方法。

因此,关系方法必须写成 quoteLines。 (或任何正确的驼峰式大小写字符串)

public function quoteLines() {
return $this->hasMany('QuoteLine');
}

然后,您可以使用 Quote::find($id)->quote_linesQuote::find($id)->quoteLines 访问此关系(当使用驼峰式大小写时,'quote_lines' 和 'quoteLines' 都会计算为 'quoteLines'。)

脚注:laravel 中的“驼峰式大小写”指的是以下形式的字符串:heyThereWorld。第一个字母必须小写,所有后续单词的第一个字母必须大写

关于Laravel 4 - 无法检索一对多关系中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17924514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com