标签: relationship

SQL:一个外键引用多个表之一中的主键

我正在开发一个应用程序,它将用作其他应用程序的可扩展框架.

其中一个基本类称为Node,而Nodes具有Content.SQL表看起来像这样:

TABLE节点(NodeId int,....等)

TABLE NodeContentRelationship(NodeId int,ContentType string,ContentId int)

扩展应用程序的开发人员将创建自己的内容类型.

显然,从关系数据库的角度来看,这是不好的,因为无法向NodeContentRelationship.ContentId添加外键关系,即使它外键列.

但是,解决方案非常简单和强大,所以我不愿意改变它.

你觉得怎么样 - 我是否在追寻一个痛苦的世界?

sql database foreign-keys relationship

0
推荐指数
1
解决办法
1507
查看次数

Django - 在"后向"关系中过滤相关对象

我一直在研究一些"落后"关系的模型.我开始想知道......如果我想过滤一些结果怎么办?

我有两个型号:

Model A:
 name
 image
 date 

Model B:
 ForeignKey to Model A
 name
 date
Run Code Online (Sandbox Code Playgroud)

要访问模型AI,请使用:p = A.objects.all().order_by(' - date')

然后我把它传递给模板.

在模板中:

{% for n in model_a.all %}
  {% for item in n.modelb_set.all %}

   <li>{{item.name}}</li>

  {% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

我得到了模型A的所有后向相关对象,那很好.

现在如果我想从该查询中过滤一些结果怎么办?

我在考虑通过以下方式迭代:

p = A.objects.all().order_by('-date')

for n in p:
    for x in n.modelb_set.filter(date_lte=""):
    ls = []
    ls.append[x]
Run Code Online (Sandbox Code Playgroud)

我如何将其传递给模板并获得我之前获得的(未过滤的视图)但现在已经过滤了结果?

django filter relationship models

0
推荐指数
1
解决办法
1361
查看次数

如何使用Laravel 5从相关表中查询具有条件的表

我有两张桌子,

表用户:id,name等

表视频:id,user_id等

型号:视频

public function user()
{
    return $this->belongsTo('App\Models\User');
}
Run Code Online (Sandbox Code Playgroud)

我想选择用户"Max"所拥有的所有视频.

我尝试过以下内容:

$Videos = \App\Models\Video::with('user')->where('user.name','=','Max')->get();



Unknown column 'user.name' in 'where clause' (SQL: select * from `videos` where `videos`.`deleted_at` is null and `user`.`name` = Max)
Run Code Online (Sandbox Code Playgroud)

谢谢!

relationship conditional-statements laravel eloquent

0
推荐指数
1
解决办法
3799
查看次数

laravel中的类别关系未定义的属性:stdClass ::

嗨,我正在从事laravel培训项目。尝试获取每个产品类别名称时,模型和关系存在问题。
这是我的产品型号

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
   public function category()
   {
   return $this->belongsTo('App\Category');
   }
}
Run Code Online (Sandbox Code Playgroud)

和我的类别模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
   protected $table = 'categories';

   public function products()
   {
      return $this->hasMany('App\Product');
   }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试获取像这样的每个产品的类别名称时

      @foreach($products as $product)
      <tr>
        <td>{{ $product->id }}</td>
        <td>{{ $product->name }}</td>
        <td>{{ $product->category->name }}</td>
      </tr>
      @endforeach
Run Code Online (Sandbox Code Playgroud)

当我运行页面时,出现此错误

Undefined property: stdClass::$category (View: /var/www/html/projectname/resources/views/my/products/index.blade.php)
Run Code Online (Sandbox Code Playgroud)

谁能告诉我是什么原因导致此错误?


这里更新的是表结构
Products:id,name,category_id-> unsigned()
Categories:id,name
,这是我用来获取$ products的代码

    $user_id = Auth::user()->id;
    $products = …
Run Code Online (Sandbox Code Playgroud)

relationship stdclass categories laravel

0
推荐指数
1
解决办法
2131
查看次数

如何创建具有多对多父子关系的Django模型?

我已经知道,我可以在同一模型中实现ForeignKey父子关系,从而可以与1个parent =多个孩子创建关系。但是,如何在同一模型中完成多对多关系?此刻,我编写并测试了这一点:

class Person(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    parents = models.ManyToManyField(
        'self', blank=True
    )
Run Code Online (Sandbox Code Playgroud)

它可以工作,但不像我预期的那样。它的作用是:

john = Person.objects.get(id=1)
sam = Person.objects.get(id=2)

>>> john.parents.all()
<QuerySet [<Person: Alex>, <Person: Peter>, <Person: Sam>]>
>>> sam.parents.all()
<QuerySet [<Person: John>]>
Run Code Online (Sandbox Code Playgroud)

如您所见,Sam应该是John的孩子,而不是他的孩子和父母。我想要的是在检索sam.parents.all()时得到约翰,但不是在检索john.parents.all()时得到山姆。

有没有办法实现我想要的?还是至少不能使用这种逻辑?我是否必须使用同一应用程序创建第二个单独的模型?

python django relationship

0
推荐指数
1
解决办法
605
查看次数

Laravel雄辩地带有“ with”和“ wherehas”

假设我有三个与外键链接的数据库,即玩家,信用和照片。

player
id | name | address

credit
id | player_id | credit_status

photo
id | player_id
Run Code Online (Sandbox Code Playgroud)

假设我想获得所有具有credit_status $ status的玩家,我会这样做:

$status = 'bar';
Player::with('photo','credit')->whereHas('credit', function ($q) use ($status) {
            $q->where('credit_status', $status)->with('credit_status');
        })->paginate(15);
Run Code Online (Sandbox Code Playgroud)

这将列出所有具有credit_status $ credit的玩家,但仍然列出该玩家的所有积分,而不管其状态如何。

输出类似于:

{
id: 1
name: Andrew
address: home
photo: {
          id: 2
          photo: image1
       }
credit: {
          [
              {
              id: 6
              credit_status: foo,
              id: 2
              credit_status: bar
              }
          ]
        }
},
{
id: 2
name: Mark
address: home
photo: {
          id: 5
          photo: image4
       } …
Run Code Online (Sandbox Code Playgroud)

relationship laravel eloquent

0
推荐指数
1
解决办法
2138
查看次数

实体框架相关表获取和保存数据

我一直在NETSO中寻找一些答案 - 我对实体框架几乎是一个菜鸟..所以我对相关实体确实有一些困惑..我正在使用 C# , Winforms , Linq , EF6^ (生成的反向数据库类在 DAL 项目中)

我很难解决这个问题。我有 3 个表,它们与第四个表相关 - 第 4 个表使用其他 3 个表中的 PK_ID 列 - 配置为外键,它们还组成了复合键(主键)。

我的粗略 ER 图。

ER图

我需要在 EF 查询中做的是获取多个列以将数据绑定绑定到列表视图。

我想要的列是 EnumerationCode、Part.Number、Part.Description。

我将使用 ProdID (我将 Products 绑定到 DropDown )作为这些附加值的 getter。

所以基本上我想到了这一点 Select From TernaryTable T Join EnumID on ENumTable.EnumID where T.ProdID = myProdID order by EnumCode [Join this to Select Part.Number, Part.Description From PartID = TernaryTable.PartID )

我认为可能有一个简单的解决方案来获取这些数据,然后如何保存对数据的任何更改 - 但正如我所说,我迷失了。

我需要两种方法,一种是获取数据,另一种是保存数据发生的任何更改。

我读过这个

使用 Linq …

c# linq entity-framework relationship winforms

0
推荐指数
1
解决办法
2994
查看次数

使用 SqlAlchemy 中的项目子集加载“关系”(类似于 Django 的“Prefetch”对象)

backref有没有办法从 SqlAlchemy 中的关系中检索元素子集,但保持创建类时我在(关系)中定义的顺序?

假设我有两个表/模型: AUser和 a UserLog,其中包含用户执行的操作(只是Basedeclarative_base ()

每个日志UserLog都有一个执行操作的 ID 的外键User,并且每个日志的操作类型可以从Enum. 每个用户日志还有一个created我订购的时间戳:在常规情况下,我希望从最旧到最新(最旧的在前)获取日志。

但是,我还希望能够让特定用户仅加载日志的子集(特定操作的日志)。我知道这违背了连接负载的“要点”,因为我会得到不切实际的数据库状态(有更多日志链接到我获取的对象User将反映的用户),但在某些情况下它会很有帮助。

class UserLog(Base):
    __tablename__ = 'user_logs'
    id = Column(UUID(as_uuid=True), primary_key=True)
    timestamp_created = Column(
        DateTime, server_default=sqlalchemy.text("now()")
    )
    user_id = Column(
        UUID(as_uuid=True),
        ForeignKey("users.id", ondelete="CASCADE")
    )
    action = Column(SaEnum(UserLogsConstants), nullable=False)

    user = relationship(
        "User", 
        backref=backref(
          'logs', order_by="asc(UserLog.timestamp_created)"
        ) # The order_by is important here
    )
Run Code Online (Sandbox Code Playgroud)

感谢这个 SO 答案,我已经能够使用 加载日志子集contains_eager,但随后我丢失了timestamp_created …

python sqlalchemy loading relationship

0
推荐指数
1
解决办法
1689
查看次数

如何为字段指定默认值 Laravel Nova

我想将资源字段的默认值设置为经过身份验证的用户的id. 我有一个名为 的模型,它与和Note具有一对多关系。GameUser

User hasMany Note
Game hasMany Note

Note belongsTo User
Note belongsTo Game
Run Code Online (Sandbox Code Playgroud)

在 Laravel Nova 中,我的注释字段如下所示

ID::make()->sortable(),
Text::make('Note', 'note')->onlyOnIndex(),
Textarea::make('Note', 'note')->alwaysShow(),
BelongsTo::make('Game', 'game')->hideWhenCreating()->hideWhenUpdating(),
BelongsTo::make('Created By', 'user', 'App\Nova\User')->hideWhenCreating()->hideWhenUpdating(),
DateTime::make('Created At', 'created_at')->hideWhenCreating(),
DateTime::make('Updated At', 'updated_at')->hideWhenCreating(),
Run Code Online (Sandbox Code Playgroud)

因为我引用Nova 资源Note上的Game,所以当我创建 时Note,该game_id列已正确填充。但是,我希望该user_id列是经过身份验证的用户的值。它似乎不是这样工作的,我该如何实现呢?

relationship laravel laravel-nova

0
推荐指数
1
解决办法
6695
查看次数

在 Laravel 中更新一对一多态的最佳方法是什么?

我有一对一的多态,我想找出更新现有关系的最佳方式。

class Image extends Model
{
    /**
     * Get the owning imageable model.
     */
    public function imageable()
    {
        return $this->morphTo();
    }
}

class Post extends Model
{
    /**
     * Get the post's image.
     */
    public function image()
    {
        return $this->morphOne('App\Image', 'imageable');
    }
}

class User extends Model
{
    /**
     * Get the user's image.
     */
    public function image()
    {
        return $this->morphOne('App\Image', 'imageable');
    }
}
Run Code Online (Sandbox Code Playgroud)

PostController 中的更新方法

public function update(Request $request, $id)
{
    $post       = Post::findOrFail($id);
    $post->image()->delete();
    $post->image()->save(new Image([
        'url'=> $request->input('image_url), …
Run Code Online (Sandbox Code Playgroud)

polymorphism one-to-one relationship laravel

0
推荐指数
1
解决办法
437
查看次数