我有几个表:
Quote
id_quote (PK)
ItemQuote
id_item_quote (PK)
quote_id (FK)
item_id (FK)
Item
item_id (PK)
在每个 ItemQuote 上,可以有多个 Service :
ItemQuoteService
id_item_quote_service (PK)
item_quote_id (FK)
service_id (FK)
Service
id_service (PK)
我使用两个自定义枢轴实体,因为关系中还有其他字段:
class Quote extends Model {
// ...
public function items() {
return $this->belongsToMany(Item::class, 'ItemQuote', 'quote_id')
->using(ItemQuote::class);
}
}
class ItemQuote extends Model {
// ...
public function services() {
return $this->belongsToMany(Service::class, 'ItemQuoteService', 'id_item_quote')
->using(ItemQuoteService::class);
}
}
当我得到报价时,我可以轻松地将 ItemQuote
$quote = Quote::with([
'items',
])->findOrFail($id);
$quote->items->pivot // contains the attributes of ItemQuote
我还想访问 ItemQuoteService 的属性。但是我不知道该如何传递给with
函数以使其正常工作。
$quote = Quote::with([
'items.pivot.service', // NOT WORKING
])->findOrFail($id);
如何获取Quote->ItemQuote->ItemQuoteService
属性(从获取一个 Quot 报价)?
答案 0 :(得分:1)
您也许可以使用其他关系来检索它们:
require 'fileutils'
class FileOwner
attr_accessor :name
attr_accessor :permissions
def initialize(name, permissions, path_to_files)
@name = name
@permissions = permissions.push(name)
@personal_folder = path_to_files + name
ensure_personal_folder_exists()
end
public
def copy_file_if_allowed(file_path, file_identifier)
if @permissions.include? file_identifier
add_file_to_personal_folder(file_path)
end
end
private
def ensure_personal_folder_exists()
FileUtils.mkdir_p(@personal_folder)
end
def add_file_to_personal_folder(file_path)
FileUtils.cp(file_path, @personal_folder)
end
end
然后使用// Class Quote
public function ItemQuoteServices()
{
return $this-hasManyThrough(ItemQuoteService::class, ItemQuote::class, 'quote_id', 'item_quote_id');
}
对其进行调用。
您必须仔细检查那些第3和第4个参数,如果不使用它们,它可能会起作用。
您还可以在$quote->with(['itemQuoteServices']);
类上创建一个ItemQuoteServices()
(几乎相同的代码),但是随后您必须使用Item
来调用它,这会检索更多的数据。 / p>