0

我想检索属于一个 author_id(在本例中为 author2)的所有任务详细信息(task_title 等)。

测试表

author_id  task_id
author2    task_1
author2    task_2

任务表

task_id task_title 
task_1  task_title_1
task_2  task_title_2

作者表

author_id author_name
author_2  authorTwo

模型test.php

public function tasks()
{  
return $this->belongsTo('Task','task_id');  
}

测试控制器.php

public function index()  
{  
   $test=Test::find('author2')->tasks()->get();  
   return View::make('tests.index', compact('tests'));  
}

和查询SQL:

select * from `tests` where `author_id` = 'author2' limit 1
select * from `tasks` where `tasks`.`task_id` = 'task1'

但实际上在任务表中,与作者 2 相关的值不止一个(在本例中为任务 1 和任务 2),但 sql 仅说明了任务 1。

如何删除限制 1 限制以检索属于作者 2 的所有任务?

4

2 回答 2

3

这有很多问题。主要的有:

  • 您正在使用错误的关系进行多对多,请查看belongsToMany()
  • 看起来您正在尝试查找不受支持的复合键
  • Find 旨在仅获取一条记录,并且不限制关系的结果集。如您的 SQL 所示,您并没有将任务限制为一项,而是在限制测试。当您需要获取多条记录时get()结合使用。where()

这是一个帮助您入门的文档链接 - http://four.laravel.com/docs/eloquent

于 2013-05-23T13:58:24.827 回答
1

Test::where("author_id","=","author2")->get()

顺便说一句,你不应该使用find任何不是主键的东西。这是 find 的目的:它获取一个项目,因为它假设它搜索的键是主自动增量(即唯一)

于 2013-05-23T13:57:31.447 回答