在laravel

时间:2017-08-28 17:13:49

标签: php mysql laravel eloquent

我是laravel的新手,我并不真正了解人际关系如何运用它。我想我只是在" off"我正努力做一些相对简单的事情。

我有2张桌子。 项目广告资源

inventory 表中的每个条目都有一个标记为 itemid userid 的列。

例如,这可能是表库存及其条目 -

  id | userid | itemid  | ...
+-----------------------------------
| 1  |   1    |    1    | ...
| 2  |   1    |    4    | ...
| 3  |   1    |    6    | ...
| 4  |   2    |    1    | ...

(有更多列,但这些只是将所有内容链接在一起的列)

基本上,我尝试做的就是获取用户拥有的所有项目。我的常规方法只是使用JOIN查询,但我不确定它在Laravel中是如何工作的。

我有2个非常简单的模型来检索每个表中的数据

Inventory.php     

namespace App;

use Illuminate\Database\Eloquent\Model;

class Inventory extends Model
{
  protected $table = 'inventory';
}

Item.php     

namespace App;

use Illuminate\Database\Eloquent\Model;

class Item extends Model
{
  protected $table = 'items';
}

如何获取库存表中每个条目的商品数据?我尝试使用雄辩的文档来定义关系,但我一定做错了。

1 个答案:

答案 0 :(得分:2)

在您的情况下,many-to-manyUser之间存在Item关系,因此无需使用Inventory作为模型,导致inventory表只是一个支点表。

您的模型可能如下所示:

class User extends Model
{

    public function inventory_items()
    {
        return $this->belongsToMany(
            'Item',                             // joined model
            'inventory',                        // pivot table name
            'userid',                           // column name in pivot table
            'itemid'                            // column name in pivot table
        );
    }
}

您可以使用的用户项目

$user = User::find($user_id);
$items = $user->inventory_items()->get();

同样的技术可以应用于Item模型。

更新:用于检索其他数据透视表列 - 将inventory_items()更新为:

public function inventory_items()
{
    return $this->belongsToMany(
        'Item',                             // joined model
        'inventory',                        // pivot table name
        'userid',                           // column name in pivot table
        'itemid'                            // column name in pivot table
    )->withPivot('column_1', 'column_2')
}